Ich habe den folgenden CustomRenderer, um einen Stil auf Schaltflächen in meinem iOS-Projekt meiner plattformübergreifenden Xamarin.Forms App anzuwenden.Xamarin iOS CustomRenderer Schaltflächenhintergrund funktioniert plötzlich nicht
Die Schaltfläche hatte abgerundete Kanten, weißen Text und einen blauen Hintergrund mit Farbverlauf.
Alles hat gut funktioniert, bis ich Xcode 8.1 heruntergeladen habe. Seit dem Wechsel zu 8.1 zeigt derselbe Code nicht mehr den Hintergrundgradienten. Kann jemand sehen, wie ich meinen Code ändern konnte, um den Hintergrundgradienten wieder zu arbeiten?
Der Rahmenradius und die Textfarbe funktionieren wie gewohnt - nur der Hintergrundgradient fehlt.
[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace MyApp.Forms.iOS.CustomRenderers
{
class CustomButtonRenderer : ButtonRenderer
{
public override void LayoutSubviews()
{
foreach (var layer in Control?.Layer.Sublayers.Where(layer => layer is CAGradientLayer))
{
layer.Frame = Control.Bounds;
}
base.LayoutSubviews();
}
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
var gradient = new CAGradientLayer();
gradient.CornerRadius = Control.Layer.CornerRadius = 10;
gradient.Colors = new CGColor[]
{
UIColor.FromRGB(153, 204, 255).CGColor,
UIColor.FromRGB(51, 102, 204).CGColor
};
var layer = Control?.Layer.Sublayers.LastOrDefault();
Control?.Layer.InsertSublayerBelow(gradient, layer);
Control.SetTitleColor(UIColor.White, UIControlState.Normal);
Control.Layer.BorderColor = UIColor.FromRGB(51, 102, 204).CGColor;
Control.Layer.BorderWidth = 1;
}
}
}
}
Von [diesem Beitrag] (http://stackoverflow.com/a/39515254/3850012) sieht es so aus, als ob sich Xcode 8 geändert haben könnte, wenn Sie den 'CornerRadius' auf eine Ebene anwenden können. Eine Lösung von dieser Seite ist es, 'Control.LayoutIfNeeded()' zu setzen, bevor Sie Ihren 'CornerRadius' einstellen, um zu erzwingen, dass die' Control'-Bedingungen angewendet werden. Obwohl Sie die 'LayoutIfNeeded()' möglicherweise in eine Überschreibung von 'AwakeFromNib()' verschieben möchten – hvaughan3
Wird der Farbverlauf angezeigt, wenn Sie das Telefon/SIM drehen und zurück drehen? – SushiHangover
@SushiHangover Ja, das stimmt, aber es passt nicht so wie erwartet zu den Grenzen. –