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】:做这些检查
AppDelegate
的didFinishLaunchingWithOptions
中rootViewController
的框架是否设置为[[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
更改为NSLayoutAttributeHeight
和toItem
更改为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.view
是 viewControllers
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 高度没有扩展的主要内容,如果未能解决你的问题,请参考以下文章