自动布局不传递给子层

Autolayout not pass to sublayer

我正在为 iOS v5.8.3(build 3) 使用 Xamarin

我在另一个 UIView 上添加了一个 UIView 和一个 CAGradientLayer 谎言:

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);
}

但是结果是这样的:

问题是梯度层,他的frame不适合想要的UIView。 我认为这是一个 Autolayout 问题。

谁能帮我解释一下?

提前致谢!

P.S 上面的代码是用 objective sharpie 写的,但是 iOS 的开发者很容易看懂 ;)

CALayer 及其子类不受自动布局影响。

要更新图层框架,您可以使用 viewDidLayoutSubviews 如果您从视图控制器更新,或 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;
}