从nib文件加载UIView时,视图通常将translatesAutoresizingMastIntoConstraints
设置为YES。
因此,您无法向视图添加顶级约束(例如宽度和高度)。
过去我能够生成一个顶级视图,它允许我创建顶级约束,并将translatesAutoresizingMastIntoConstraints
设置为NO。
如何在没有子类化的情况下从笔尖加载UIView时会出现这种行为吗?
答案 0 :(得分:9)
更新虽然您可以创建可约束的视图,但我不推荐它,因为它很难区分两者之间的区别。如果您需要修改或重新创建视图,您可能会忘记它是一个可约束的视图并意外地重新创建静态视图。因此,我建议您将顶级视图保留为静态视图,并在从笔尖创建它们后手动更新它们:
let view = UINib(nibName: "ABCView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UIView
view.translatesAutoresizingMaskIntoConstraints = false
如果视图需要内在内容大小,请覆盖intrinsicContentSize,或通过nib文件定义其宽度和/或高度,只需添加"大小调整"子视图固定在顶级视图(即静态视图的顶部,底部,尾部和前导约束)上,并具有宽度和/或高度约束。
这似乎是一个未记录的Xcode功能(在Xcode 6和Xcode 7.1上测试过)。
我将使用以下术语:
translatesAutoresizingMaskIntoConstraints
设置为YES。translatesAutoresizingMaskIntoConstraints
设置为NO。首先让我们来看看他们的一些差异......
.xib内容:
<view contentMode="scaleToFill" id="bU6-qJ-x7d" userLabel="STATIC">
<rect key="frame" x="0.0" y="0.0" width="320" height="439"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="687" y="37.5"/>
</view>
更多信息:
<UIView: 0x7fec19ccb1b0; frame = (0 0; 320 439); autoresize = W+H; layer = <CALayer: 0x7fec19ccae80>>
.xib内容:
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0G6-nE-8IZ" userLabel="CONSTRAINABLE">
<rect key="frame" x="0.0" y="0.0" width="320" height="439"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="687" y="-455.5"/>
</view>
更多信息:
<UIView: 0x7f9503eb2ba0; frame = (0 0; 320 439); autoresize = RM+BM; layer = <CALayer: 0x7f9503e9dc80>>
<autoresizingMask ...
元素。