Autolayout没有传递给子层

时间:2015-04-15 07:43:49

标签: ios iphone autolayout calayer cagradientlayer

我使用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不适合所需的UIView。 我认为这是一个Autolayout问题。

有人能对我说些什么吗?

提前致谢!

P.S 上面的代码用objective sharpie编写,但iOS开发人员可以轻松理解;)

1 个答案:

答案 0 :(得分:11)

CALayer及其子类不受autolayout的影响。

要更新图层框架,如果要从视图控制器更新a,或者从自定义UIView子类更新viewDidLayoutSubviews,则可以使用layoutSubviews

来自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;
}