У меня есть следующий CustomRenderer, чтобы применить стиль к кнопкам в моем проекте iOS моего кросс-платформенного приложения Xamarin.Forms.Xamarin iOS CustomRenderer кнопка фона внезапно не работает
Кнопка имела закругленные края, белый текст и синий фон градиента.
Все работает нормально, пока я не загрузил Xcode 8.1. Начиная с перехода к 8.1, тот же код не будет представлять собой градиент фона. Может ли кто-нибудь увидеть, как я могу изменить свой код, чтобы снова получить фоновый градиент?
Радиус границ и цвет текста работают как обычно - это просто отсутствующий градиент фона.
[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;
}
}
}
}
Из [this post] (http://stackoverflow.com/a/39515254/3850012) похоже, что Xcode 8, возможно, изменился, когда вы можете применить 'CornerRadius' к слою. Одним из решений этой страницы является выполнение 'Control.LayoutIfNeeded()' перед установкой 'CornerRadius' для принудительного применения ограничений' Control'. Хотя вы можете переместить 'LayoutIfNeeded()' в пределах переопределения 'AwakeFromNib()' – hvaughan3
Появляется ли градиент, если вы вращаете телефон/сим и вращаетесь назад? – SushiHangover
@SushiHangover да, но это не соответствует границам, как ожидалось. –