我是新手,但是这是我的第一次尝试。无论我做什么,结果都会出现白屏。这是我的尝试。

我有一个UIView,让我说一个框架parentView(60, 154, 200, 200)。它是self.view的子视图。

然后我有一个动态视图,比如说框架dynamicView(0, 0, 260, 100)和框架label(15, 25, 230, 50),它是dynamicView的子视图。

当我将dynamicView作为子视图添加到parentView时,它超出了parentView的范围。因此,我想调整dynamicView及其子级(label)的大小,以使其位置位于parentView的中心,并且dynamicViewparentView的范围内。

我的第一次尝试是设置clipsToBounds,它在Xcode5,iOS7中不起作用。因此,下一个选择是使用NSLayoutConstraint实现此目的。我对此一无所知。我欢迎您的想法。

最佳答案

我将解决dyanmicView成为parentView问题的一部分,然后让您走过去

首先:如果要动态创建视图,那么就很好了,但是如果从情节提要中创建了视图,则必须将其与父视图分离,然后重新附加它。这就是摆脱它的方式以前的NSConstraints(通常是情节提要引入的)可能与您的新NSConstraints冲突。

您还必须将setTranslatesAutoresizingMaskIntoConstraints设置为NO b / c,这也可能会干扰ns约束。

我通常会像这样执行最后两个步骤,使用mapObjectsUsingBlock使创建约束的整个繁琐过程变得更加愉快和自然:

    [@[view_1, view_2, /../, view_n] mapObjectsApplyingBlock:^(UIView *view) {
        [view removeFromSuperview];
        [view setTranslatesAutoresizingMaskIntoConstraints:NO];
        [view setHidden:NO];
        [superView addSubview:view];
    }];


然后在应用nsconstraints之前,您必须确保要应用约束的视图已附加到其父级:

[parentView addSubview:dynamicView];


那么您想创建一个绑定字典:

NSDictionary *buttonBindingsDictionary = @{ @"parentView" : parentView,
                                            @"dynamicView" : dynamicView};


那么您想使用visual format language添加约束。我也在这里使用mapObjectsUsingBlock(我将用英语解释每个约束):

NSArray *buttonConstraints = [@[@"V:|-[dynamicView(>=200)]-|",
                                @"|-[dynamicView(>=260)]-|",
                                ] mapObjectsUsingBlock:^id(NSString *formatString, NSUInteger idx){
    return [NSLayoutConstraint constraintsWithVisualFormat:formatString options:0 metrics:nil views:buttonBindingsDictionary];
}];


V:|-[dynamicView(>=200)]-|表示垂直讲.. dynamicView与其父级之间的上下距离应相等。.dynamicView's高度应不小于200

|-[dynamicView(>=260)]-|表示水平方向.. dyanmicview与其父级之间的左右距离应相等。.dyanmicView's宽度也应不小于260

注意:您可以自己进行数学运算,并精确设置dyanicView与它的父级之间的左/右/下/上距离。.这只是简单一点..但是有时候nsconstraints搞砸了,我必须自己做。

在这种情况下,它看起来像这样,其中x是您想出的距离:

V:|-x-[dynamicView(>=200)]-x-|
|-x-[dynamicView(>=260)]-x-|


然后必须将约束添加到父视图:

[parentView addConstraints:[buttonConstraints flattenArray]];


请注意,这里我使用了flatten array,这又是我的库b / c中的一种方法,我想为它提供一个一级数组,而不是数组数组。

你很高兴去!

注意:我知道这可能无法完美运行..但是它使您知道该怎么做+一些帮助文件。这需要一些练习,您应该肯定要看一些tutorials。.我建议您使用情节提要从nsconstraints开始(您可以选择一个视图..然后转到editor> pin> ..然后选择一些内容。一些即时的视觉反馈。您还可以通过选择视图控制器,然后转到属性检查器并在模拟量度下选择不同的大小,来在情节提要板上立即模拟视图在3.5“显示器和4.0”显示器中的视图。

花点时间,但是有一点可以肯定:一旦您进入nsconstraints,您将永远不会回头!完全值得!

ps。您也可以使用nsconstraints animate视图..以防万一您想知道。

10-07 21:03