我使用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);
}
但结果是这样的:
问题是渐变图层,他的frame
不适合所需的UIView
。
我认为这是一个Autolayout
问题。
有人能对我说些什么吗?
提前致谢!
P.S
上面的代码用objective sharpie
编写,但iOS
开发人员可以轻松理解;)
答案 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;
}