加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – iOS7 – 在状态栏下查看 – edgesForExtendedLayout不

发布时间:2020-12-15 02:04:49 所属栏目:百科 来源:网络整理
导读:我有一个去年建成的项目,它使用XIB,没有故事板。 XIB不使用自动布局,但它们使用一些自动调整。运行iOS7时,我有一个问题,其中所有的视图都被收录在状态栏下。我完全明白这是iOS7的一个新功能,其中可以预期。但是,解决这个问题的所有解决方案都不行。视
我有一个去年建成的项目,它使用XIB,没有故事板。 XIB不使用自动布局,但它们使用一些自动调整。运行iOS7时,我有一个问题,其中所有的视图都被收录在状态栏下。我完全明白这是iOS7的一个新功能,其中可以预期。但是,解决这个问题的所有解决方案都不行。视图顶部的图像始终显示在状态栏下方,我没有使用导航栏或任何类似的东西。

我试过在XIB中更新Y-deltas(它们对视图没有影响),我已经尝试将edgeForExtendedLayout设置为UIRectEdgeNone(什么都不做),还有很多其他的东西。每次,状态栏都会显示出它所在的视图,无论我做什么..这是除非我手动将XIB中的视图移动到允许状态栏的空间(但该解决方案不起作用,因为它在iOS6中看起来不错,当然)

奇怪的是,即使我尝试使用一行代码来进行视图转换,它也不起作用(如下所示):

self.view.frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y+20,self.view.frame.size.width,self.view.frame.size.height);

不是我会用这种解决方案,但它只是奇怪的是它没有工作(唯一的时候,我通常看到,如果自动布局是适用的,这不是在这种情况下,不工作)。

状态栏显示的是一种设计要求,而我只是为了无法将视图置于iOS7的状态栏中。我已经阅读了关于该主题的每一个Stack Overflow文章,以及Apple的转换/指南。再次重申,我完全理解它应该如何运作,以及预期的解决办法应该如何,但是对于这个特定的项目来说,似乎没有一个工作。

我是一个经验丰富的iOS开发人员,但这个项目是由另一个团队建立的,所以我不知道XIB文件,plist或者代码中有没有隐藏的东西,可能会胜过上述设置。请让我知道,如果还有其他可以看到的内容,或者我可以提供的更多信息。

提前致谢!

解决方法

如果在Interface Builder中设置iOS 6/7增量值,请记住在Interface Builder文档中将“View as”设置为“iOS 6”,因为它是要复制的iOS 6布局。然后,三角形将仅在iOS 7上使用,将内容推送到状态栏下方。如果您将“查看为”设置为iOS 7(默认值),则会在iOS 6上给予iOS 7外观。

但是,如果您根据视图框架以编程方式重新定位或调整视图大小,则三角形将无法帮助您,因为该框架不会考虑到三角形。

而不是使用三角形,我发现最好的解决方案是在主XIB上启用自动布局,然后在顶部/内容视图上设置顶部空间限制,以遵循顶部布局指南。本指南在iOS 7中引入,表示状态栏下方的位置。不幸的是,在不使用故事板的情况下,Interface Builder中不提供该指南,但可以以编程方式添加。

我做的是在SuperView中添加一个顶层空间约束,而不是在Interface Builder中,并在代码中为此创建了一个插件。然后,在viewDidLoad中,如果topLayoutGuide可用(iOS 7),请使用“顶部布局指南”替换此插座中的约束。

if ([self respondsToSelector:@selector(topLayoutGuide)]) {
    [self.view removeConstraint:self.containerTopSpaceConstraint];

    self.containerTopSpaceConstraint =
    [NSLayoutConstraint constraintWithItem:self.contentView
                                 attribute:NSLayoutAttributeTop
                                 relatedBy:NSLayoutRelationEqual
                                    toItem:self.topLayoutGuide
                                 attribute:NSLayoutAttributeBottom
                                multiplier:1
                                  constant:0];

    [self.view addConstraint:self.containerTopSpaceConstraint];

    [self.view setNeedsUpdateConstraints];
    [self.view layoutIfNeeded];
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读