Nicht sicher, ob dies ein Fehler in unserer Dokumentation [1] oder ein Fehler in der iOS ViewRenderer
Code [2] für die SetBackgroundColor
Methode ist. Es gibt also einige Möglichkeiten, dies zu umgehen. Eine davon ist Ihr benutzerdefinierten Renderer vererben VisualElementRenderer<T>
stattdessen zu haben, zum Beispiel:
public class ViewBaseRenderer : VisualElementRenderer<ContentView>
{
//...
}
Wenn auf dem Standard-Renderer-Typ in iOS Code Überprüfung mit:
var contentRenderer = Platform.CreateRenderer(new ContentView())
var rendererType = contentRenderer.GetType();
rendererType
ist ein VisualElementRenderer<T>
, so scheint dies zu Der Standardrenderer, der von Forms verwendet wird, scheint also ein Fehler in den Dokumenten zu sein.
Eine weitere „Abhilfe“ wäre die ViewRenderer
zu verwenden, aber die SetBackgroundColor
Methode überschreiben:
public class ViewBaseRenderer : ViewRenderer
{
protected override void SetBackgroundColor(Color color)
{
base.SetBackgroundColor(color);
if (NativeView == null)
return;
if (color != Color.Default)
NativeView.BackgroundColor = color.ToUIColor();
}
ich dies mit dem Xamarin oben gebracht haben Forms Team, um zu bestimmen, ob es sich um einen Fehler in der Dokumentation oder ein Fehler ist in der Forms iOS Platform Code für die ViewRenderer
. Wenn Sie den Formular-Quellcode betrachten, den ich verlinkt habe [2], sehen Sie, dass, wenn Control
null ist, was es in diesem Fall ist, die Hintergrundfarbe nie gesetzt wird. Indem Sie den Code überschreiben und hinzufügen, um die Hintergrundfarbe für NativeView
festzulegen, können Sie diesen möglichen Fehler umgehen.
So scheint es anscheinend die Dokumente sind fehlerhaft. Wenn Sie ViewRenderer
verwenden, müssen Sie die Control
selbst einstellen. Andere Renderer, die von ViewRenderer
erben, wie LabelRender
, setzen die Control
bereits, aber ViewRenderer
nicht, also müssten Sie SetNativeControl()
in der OnElementChanged
überschreiben aufrufen, um ein natives Steuerelement zu erstellen und festzulegen. Sieh diesen Forenbeitrag [3]. Persönlich denke ich, dass man von den Renderer erben sollte, die standardmäßig verwendet wird, die in diesem Fall ist ein VisualElementRenderer<T>
[1] https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/renderers/#Layouts
[2] https://github.com/xamarin/Xamarin.Forms/blob/74cb5c4a97dcb123eb471f6b1dffa1267d0305aa/Xamarin.Forms.Platform.iOS/ViewRenderer.cs#L99
[3] https://forums.xamarin.com/discussion/comment/180839#Comment_180839
Haben Sie versucht, ihm eine Breite und eine Höhe zu geben? Sie sind wahrscheinlich 0. –
Es ist nichts falsch mit der Ansicht selbst, Größe und Layout sind korrekt. Aber die BackgroundColor-Eigenschaft funktioniert nicht, wenn ich meinen eigenen (leeren) CustomRenderer definiere. – Florian