我在Xcode中创建了一个XIB,并添加了一个简单的视图作为子视图:
我想要实现的是子视图具有固定大小,并且rootview会自动调整大小到该子视图的大小,并在其周围留下20.0的边距:
所以我在子视图中添加了固定宽度和固定高度约束。然后我为20.0边距添加了四个约束:
由于superview没有任何约束,因此既不应该有歧义也不应该有矛盾的约束:我希望superview缩小以匹配约束。但是,Xcode抱怨道:
如果rootview具有固定大小并且看起来是这种情况,那么这些约束只会发生冲突。所以我的问题是:如何使XIB的rootview灵活,以便动态调整其大小以匹配其内容?
(甚至可以使用Interface Builder吗?)
答案 0 :(得分:3)
如何使XIB的根视图灵活,以便动态 调整其大小以匹配其内容?
不可能使用界面构建器。
由于superview没有任何约束,因此不应该 歧义和矛盾的约束
它不仅仅是一个超级视图。它也是笔尖中的对象。我们为这些视图定义模拟大小。这可以用来消除错误。但这些只是模拟的。
这个rootView是视图控制器视图吗?如果是,我不明白为什么你要把它的亮度修正为280,高度为168。
如果此视图是您要添加到其他“父母”的自定义视图。视图。然后,您应该将模拟大小更改为280和高度168,并且当将其添加为子视图时,您需要再添加两个约束来将此根视图定位在父视图中#39;图。
答案 1 :(得分:-1)
我遇到了同样的问题。我在xib中有一个视图,该视图具有动态内容,它需要适合其他超级视图。所以这是我如何实现的答案
首先您需要
myViewFromXib.translatesAutoresizingMaskIntoConstraints = false
,以防止将自动调整大小的掩码转换为约束。然后添加子视图superViewForMyViewFromXib.addSubview(myViewFromXib)
。只需像这样将您的约束添加到超级视图中即可:
NSLayoutConstraint.activate([
(myViewFromXib.topAnchor.constraint(equalTo: superViewForMyViewFromXib.topAnchor, constant: 0))!,
(myViewFromXib.bottomAnchor.constraint(equalTo: superViewForMyViewFromXib.bottomAnchor, constant: 0))!,
(myViewFromXib.leadingAnchor.constraint(equalTo: superViewForMyViewFromXib.leadingAnchor, constant: 0))!,
(myViewFromXib.trailingAnchor.constraint(equalTo: superViewForMyViewFromXib.trailingAnchor, constant: 0))!
])
superViewForMyViewFromXib.setNeedsLayout()
答案 2 :(得分:-2)
您可以通过手动编辑xib来完成此操作,例如设置高度约束(在我的情况下,这是设置最小高度的不等式):
答案 3 :(得分:-2)
OMG,我不能相信您接受这是不可能的,并改变您的方式,如果这不可能,那么Xib将毫无用处。请不要向其他人提供错误的信息,您的问题很详细,但答案却不尽人意:
答案绝非易事:
subview.frame.size.height = rootView.frame.size.height
subview.frame.size.width = rootView.frame.size.width