【发布时间】:2019-12-15 20:56:02
【问题描述】:
在我的UIViewController 类中,我正在创建一个名为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 中执行上述代码,但没有成功。
想知道是否有人有任何建议?
【问题讨论】:
-
[self.view addSubview: self.subView];不应该添加safeAreaView吗?loadSubviews是做什么的? -
@LukasWürzburger 抱歉,这是一个错误,我在代码中将该视图 subView 命名为,但在描述此问题时将其更改为 safeAreaView 以避免混淆。
-
loadSubviews是做什么的? -
我猜你必须在
safeAreaView类上覆盖- (void)layoutSubviews并手动调整(非自动布局)子视图(不要忘记调用 super) -
另一个选项是覆盖
safeAreaView的类frame设置器,因此每次视图框架发生变化时,您都会根据需要手动设置任何子视图框架.
标签: ios objective-c cocoa-touch uiview uiviewcontroller