2015-04-15 11 views
3

I м с использованием Xamarin для iOS v5.8.3 (сборка 3).Автопоезд не перейдет на подслой

Я добавил UIView с CAGradientLayer на другом UIView ложь это:

public static void AddGradientView (CGColor color1, CGColor color2, UIView view) { 
     UIView gradientView = new UIView (view.Bounds); 
     gradientView.BackgroundColor = UIColor.Green; 
     gradientView.AutoresizingMask = UIViewAutoresizing.All; 

     CAGradientLayer gradient = new CAGradientLayer(); 
     gradient.Frame = gradientView.Bounds; 
     gradient.Colors = new CGColor[]{ color1, color2 }; 

     gradientView.Layer.InsertSublayer (gradient, 0); 

     view.AddSubview (gradientView); 
} 

Но результат таков:

enter image description here

Проблема заключается в градиентный слой, его frame ISN 't соответствует желаемому UIView. Я думаю, что это вопрос Autolayout.

Может ли кто-нибудь надеть на меня свет?

Заранее благодарен!

P.S выше код, написанный в objective sharpie Но это можно понять с помощью iOS разработчиков легко;)

ответ

10

CALayer и его подклассы не влияет на autolayout.

Чтобы обновить рамку слоев, вы можете использовать viewDidLayoutSubviews, если вы обновляете a из контроллера вида или layoutSubviews из пользовательского подкласса UIView.

С UIViewController:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    // you need to store a reference to the gradient layer and gradient views or fetch them from the sublayers and subviews 
    self.gradient.frame = self.gradientView.bounds; 
} 

UIView подкласс:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    self.gradient.frame = self.bounds; 
} 
+0

10X Человек! работа для меня. – gran33