自动布局不传递给子层
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;
}
我正在为 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;
}