什么时候布局 UIViewControllers 视图的子视图?
When to layout subviews of UIViewControllers view?
在我的 UIViewController
class 中,我正在创建一个名为 safeAreaView
的 UIView
并将其作为子视图添加到 UIViewControllers
view
属性。我这样做是为了让 safeAreaView
占据 UIViewControllers
view
属性:
的整个安全区域
- (void) viewDidLoad
{
[self setToolbarWithColor: self.mainToolbarColor animated:NO];
self.tapGestureRecognizer.delegate = self;
self.view.clipsToBounds = YES;
self.view.backgroundColor = [UIColor lightGrayColor];
self.safeAreaView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
self.safeAreaView.clipsToBounds = YES;
self.safeAreaView.delegate = self;
self.safeAreaView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview: self.safeAreaView];
[self.safeAreaView.leadingAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.leadingAnchor].active = YES;
[self.safeAreaView.trailingAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.trailingAnchor].active = YES;
[self.safeAreaView.topAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.topAnchor].active = YES;
[self.safeAreaView.bottomAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.bottomAnchor].active = YES;
[self.safeAreaView loadSubviews];
}
这工作正常,但我的问题是,在 UIViewControllers
初始化周期之后的某个时刻,safeAreaView
更新以说明状态栏(它的 y 位置向上移动 20,然后减少尺寸增加 20)。
我需要在 safeAreaView
上布局一些子视图,但我不知道合适的时间?如果我像上面那样附加子视图,它们的高度是错误的。而且我不能在子视图上使用某些自动布局功能,因为我需要做一些特定的事情。我也试过在 viewWillAppear
中执行上面的代码,但没有成功。
想知道是否有人有任何建议?
您可以在 safeAreaView
class 上覆盖 - (void)layoutSubviews
:
- (void)layoutSubviews {
[super layoutSubviews];
// Manual frame adjustment for non-autolayout participating subviews
// ...
}
另一种选择是覆盖您的 safeAreaView
的 class 框架 setter,因此每次您的视图框架发生变化时,您将有机会手动设置根据需要任何子视图框架。
在我的 UIViewController
class 中,我正在创建一个名为 safeAreaView
的 UIView
并将其作为子视图添加到 UIViewControllers
view
属性。我这样做是为了让 safeAreaView
占据 UIViewControllers
view
属性:
- (void) viewDidLoad
{
[self setToolbarWithColor: self.mainToolbarColor animated:NO];
self.tapGestureRecognizer.delegate = self;
self.view.clipsToBounds = YES;
self.view.backgroundColor = [UIColor lightGrayColor];
self.safeAreaView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
self.safeAreaView.clipsToBounds = YES;
self.safeAreaView.delegate = self;
self.safeAreaView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview: self.safeAreaView];
[self.safeAreaView.leadingAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.leadingAnchor].active = YES;
[self.safeAreaView.trailingAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.trailingAnchor].active = YES;
[self.safeAreaView.topAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.topAnchor].active = YES;
[self.safeAreaView.bottomAnchor constraintEqualToAnchor: self.view.safeAreaLayoutGuide.bottomAnchor].active = YES;
[self.safeAreaView loadSubviews];
}
这工作正常,但我的问题是,在 UIViewControllers
初始化周期之后的某个时刻,safeAreaView
更新以说明状态栏(它的 y 位置向上移动 20,然后减少尺寸增加 20)。
我需要在 safeAreaView
上布局一些子视图,但我不知道合适的时间?如果我像上面那样附加子视图,它们的高度是错误的。而且我不能在子视图上使用某些自动布局功能,因为我需要做一些特定的事情。我也试过在 viewWillAppear
中执行上面的代码,但没有成功。
想知道是否有人有任何建议?
您可以在 safeAreaView
class 上覆盖 - (void)layoutSubviews
:
- (void)layoutSubviews {
[super layoutSubviews];
// Manual frame adjustment for non-autolayout participating subviews
// ...
}
另一种选择是覆盖您的 safeAreaView
的 class 框架 setter,因此每次您的视图框架发生变化时,您将有机会手动设置根据需要任何子视图框架。