我是新手,但是这是我的第一次尝试。无论我做什么,结果都会出现白屏。这是我的尝试。
我有一个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
的中心,并且dynamicView
在parentView
的范围内。
我的第一次尝试是设置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视图..以防万一您想知道。