iOS的两个视图恰好覆盖了父视图的一半

Dan*_*elH 2 layout constraints view ios

在我的应用中,我想要实现以下布局:

在此处输入图片说明

因此,父视图包含两个子视图。第一个精确地在中间(高度/ 2)处结束,第二个精确地从父视图的中间开始。我发现在有约束的IB中不可能做到这一点。所以我在viewDidLoad方法中使用了这段代码:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:firstView
                                                              attribute:NSLayoutAttributeHeight
                                                              relatedBy:0
                                                                 toItem:self.view
                                                              attribute:NSLayoutAttributeHeight
                                                             multiplier:0.5
                                                               constant:0];

[self.view addConstraint:constraint];
Run Code Online (Sandbox Code Playgroud)

现在它可以使用,但前提是该应用程序可以在iPhone上运行。因为视图的大小就像iPhone屏幕一样。如果此应用程序在iPad上运行,则存在问题,因为屏幕尺寸不同,因此该父视图更长。约束(上面的代码)仍然需要IB的视图大小的0.5 *大小,而不是iPad的视图大小的大小。物品toItem:self.view仍来自IB。

结果是该视图在iPad中的大小与在iPhone中的大小相同。在iPad中,有很大的空白空间,然后有iPhone尺寸的视图。

您能告诉我要做些什么才能使其在各种屏幕尺寸上通用吗?非常感谢你

Tar*_*ark 5

使用约束可以做到这一点,但是IB有点烦人且不灵活,它使约束管理器变得有些古怪。这是我的管理方式:

  • 在IB中,使用正确的框架设置两个视图
  • 在两个视图之间添加相等的高度约束
  • 降低两个视图中任何默认高度限制的优先级。不幸的是,IB不允许您完全删除它们,但是将它们设置为小于1000的值将确保它们被忽略。
  • 在视图控制器的viewDidLoad方法中,添加您已经尝试过的约束。

例如

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.topView
                                                                  attribute:NSLayoutAttributeHeight
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeHeight
                                                                 multiplier:0.5
                                                                   constant:0];
    [self.view addConstraint:constraint];
}
Run Code Online (Sandbox Code Playgroud)

而已。IB约束的屏幕截图如下所示:

顶视图约束 底视图约束