繁体   English   中英

iphone 6 plus 上具有 600x600 pt 框架的 UIViews

[英]UIViews with a frame of 600x600 pt on iphone 6 plus with size classes

我正在开发一个适用于所有设备(iPad、iPhone)的应用程序。 我为 iPad 和 iPhone 平台使用了不同的 xib 文件(只是因为原始应用程序仅适用于 iPad,并且效果很好(没有任何自动布局))。

我的 iPhone xib 文件使用自动布局和大小类。 我有启动屏幕,我已经设置好了启动图像。 当应用程序启动时,viewDidLoad 中的视图框架为 600x600,但没关系,在 viewWillAppear 之前我不会对它做任何事情。

此时,xib 文件的框架是正确的(对于 iphone5 和 iphone 6 和 iPhone 6+)。 但是我在这个 xib 中几乎没有其他视图与主视图平行(不是任何其他视图的子视图)。 所有这些其他视图都有一个 600x600 的框架。

我可以明确设置框架,但我必须手动调整每个子视图的大小...

如果我关闭尺寸类并仅使用自动布局,则框架始终为 iphone 5s 尺寸。

PS 我刚刚添加了所有可能的启动图像(正确的尺寸)删除的尺寸类别和尺寸如下:主视图 - 框架 = (0 0; 667 375)

在 xib 中查看它旁边的视图(不是子视图,但它也必须是全屏视图)- frame = (0 0; 568 320)

所有视图大小都是内在的和景观的。

编辑 1所以我的问题是:xib 中的其他视图如何在正确的框架中初始化? 不是 600x600。

如果我使用“在视图层次结构中调试”,我可以看到除主“视图”之外的所有根视图(不是任何子视图)的大小都不正确。 即使正确报告了屏幕边界,视图仍保持 600x600 大小。

编辑 2这个问题提出了类似的问题: iOS 8 top layout guide auto layout questions 但没有给出可以普遍解决问题的答案。

如果我将所有其他视图作为子视图添加到我的主视图中,框架的大小会正确(由于自动布局),但这对我来说不是一个选择,因为我不能在启动时将它们全部作为子视图。

所以这就是我让它为我工作的方式:

一旦我添加了具有错误框架的子视图,我就会向它添加自动布局约束,如下所示:

[self.view addSubview:_subviewFromSameXib];  //naming just for example

_subviewFromSameXib.translatesAutoresizingMaskIntoConstraints = NO;


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

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

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

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

这将执行以下操作:在添加我的子视图之后,它添加了新的约束,告诉这个子视图它必须根据其父视图来调整大小。

这解决了我的问题,但没有解决主要问题:xib 中的多个视图不会根据屏幕边界调整大小。 只有第一个可以。

顺便说一句,我使用的是xibs而不是故事板。 我应该补充一点,游乐场在所有设备上正确显示所有视图。 只有在运行时它们才会搞砸。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM