iPhone X 的 UIView 高度未扩展

UIView height not expanding for iPhone X

我有一个不使用故事板的旧版应用程序。一切都以编程方式添加和配置。我调整了一个 UIButton 约束,使其位于 iPhone X 屏幕底部。我注意到按钮不再响应触摸事件,一旦我将视图背景色设置为黄色,我注意到按钮在它所属的视图的边界。
我已经尝试了几种方法来扩展视图以填满屏幕,但似乎没有任何效果。我设置了视图高度,将内容模式设置为纵横比填充和缩放以填充,但没有成功。

[self.view setBackgroundColor:[UIColor yellowColor]];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

我尝试将视图的框架设置为主屏幕的边界。那没有用。

CGRect frame = [[UIScreen mainScreen] bounds];
self.view.frame = frame;

我尝试为主视图设置高度限制,但没有成功。不过我不确定我这样做是否正确。

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view
                                                              attribute:NSLayoutAttributeHeight
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:nil
                                                              attribute:NSLayoutAttributeNotAnAttribute
                                                             multiplier:1
                                                               constant:812]];

谁能告诉我哪里做错了?

toItem:nil 应该是您要将其约束到的视图...例如它是 superview... 此 viewConstraint 将此视图的高度设置为 812.0

您需要将 NSLayoutAttributeNotAnAttribute 更改为 NSLayoutAttributeHeight 并将 toItem 更改为 self.view.superview 或您想要将其绑定到的任何 view... 并更改8120.0

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view
                                                          attribute:NSLayoutAttributeHeight
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:self.view.superview
                                                          attribute:NSLayoutAttributeHeight
                                                         multiplier:1.0
                                                           constant:0.0]];

不过我会问... self.viewviewControllers view 吗?你不需要以任何方式设置它的 frame ......除非包含 viewController 它应该自动占据整个屏幕,因为它是 bounds

做这些检查

  1. rootViewController的画框是AppDelegatedidFinishLaunchingWithOptions中的[[UIScreen mainScreen] bounds]吗?像这样

    self.window.rootViewController.view.frame = [[UIScreen mainScreen]bounds];

  2. 检查 UIWindow 的框架是否已设置为 mainScreen 边界。

    self.window.frame = [[UIScreen mainScreen] bounds]

  3. 通过启用约束错误断点

  4. 检查是否有任何自动布局约束被破坏
  5. 检查开始按钮是否是 ViewController.
  6. 主视图的子视图