iPhone X 的 UIView 高度没有扩展

Posted

技术标签:

【中文标题】iPhone X 的 UIView 高度没有扩展【英文标题】:UIView height not expanding for iPhone X 【发布时间】:2017-11-06 00:13:17 【问题描述】:

我有一个不使用情节提要的旧版应用程序。一切都以编程方式添加和配置。我调整了一个 UIButton 约束,使其位于 iPhone X 屏幕的底部。我注意到该按钮不再响应触摸事件,一旦我将视图背景颜色设置为黄色,我注意到该按钮超出了视图的范围它属于。 我已经尝试了几件事来扩展视图以填充屏幕,但似乎没有任何效果。我设置了视图高度,将内容模式设置为 Aspect Fill 和 Scale to Fill 没有运气。

[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]];

谁能告诉我我做错了什么?

【问题讨论】:

我怀疑它与安全区域有关。还可以用故事板更好地重做你的应用程序。 您是否尝试过针对安全区域设置约束? 您的视图似乎没有获得框架。在 viewDidAppear 中设置视图的框架并在 didLayoutSubviews 中更改约束。 我尝试在 viewDidAppear 中设置框架,但没有成功。我还没有尝试更改 didLayoutSubviews 中的约束。我会试一试。 100% 不同意用故事板重做.. 【参考方案1】:

做这些检查

    AppDelegatedidFinishLaunchingWithOptionsrootViewController 的框架是否设置为[[UIScreen mainScreen] bounds]?像这样的

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

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

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

    通过启用约束错误断点

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

【讨论】:

设置 self.window.frame = [[UIScreen mainScreen] bounds];解决了问题 我只遵循这种方式,但仍然在顶部和底部显示黑条【参考方案2】:

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

您需要将NSLayoutAttributeNotAnAttribute 更改为NSLayoutAttributeHeighttoItem 更改为self.view.superview 或任何您想将其绑定到的view...并将812 更改为0.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

【讨论】:

是的 self.view 是视图控制器视图。我之前不必设置框架。这只是在我开始在 iPhone X 模拟器上进行测试时才开始的。今天晚些时候我会试试你的建议 我猜还有另一个问题导致 vc.view 不能全屏显示 我尝试了您的约束建议,但没有奏效。奇怪的是当我检查 self.view.superview.frame 时,它​​设置为 x=0,y=0,width=0,height=0。 self.view 的 frame 设置为 x=0, y=0, width=375, height=812 但仍显示如上图 听起来超级视图有问题?你确定超级视图正在全屏显示吗?

以上是关于iPhone X 的 UIView 高度没有扩展的主要内容,如果未能解决你的问题,请参考以下文章

使用 iPhone X 时 UIView 约束的行为不同

扩展 UIView 高度 (Swift)

UIView 在 iPhone 上显示完美,但在 iPad 上不显示

iphone 6 plus 上自动布局的意外结果

iOS UIView 大小

如何获取使用自动布局的 UIView 的 x、y、宽度、高度