总结:我在stackview中有一个子视图,并且该子视图是通过编程调整大小的。它有几个空视图来填充空白的空间。然而,在运行时,调整子元素大小的尝试不起作用,它仍然保持与故事板中相同的大小。如何调整子视图的大小,使堆栈视图遵循其新大小并相应地定位它?
细节:我有一个带有自定义布局的UICollectionView。布局正确地计算子视图的位置(它们显示在我想要的位置)并返回正确的内容大小。内容尺寸比屏幕窄,但根据方向可能更长。
自定义布局返回正确的计算大小,但集合视图不调整大小。
我已经尝试以编程方式改变父的viewDidLoad上的集合视图的大小。没有工作。
我已经尝试以编程方式改变父视图的viewDidLoad上的集合视图的layoutmargin。没有工作。
我使用Swift 3, XCode 8.
如果我理解你的问题,你需要你的UICollectionView有它的大小等于它的内容,换句话说,你想要你的UICollectionView有一个内在的大小(就像一个标签根据它的文本自动调整大小)。
在这种情况下,你可以子类UICollectionView添加这种行为,然后你不需要设置它的大小。
class IntrinsicSizeCollectionView: UICollectionView {
// MARK: - lifecycle
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
self.setup()
}
override func layoutSubviews() {
super.layoutSubviews()
if !self.bounds.size.equalTo(self.intrinsicContentSize) {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
get {
let intrinsicContentSize = self.contentSize
return intrinsicContentSize
}
}
// MARK: - setup
func setup() {
self.isScrollEnabled = false
self.bounces = false
}
}
ps:在你的。xib中,不要忘记将你的IntrinsicSizeCollectionView高度约束设置为占位符约束(检查"在构建时删除")