我有一个 xib 文件,它的高度可以动态改变,因为它包含多行标签。我需要将此 View 添加为在我的 View Controller 中定义的 uiview 的 subview 。
let settlementDetailsContentView = SettlementDetailsView.instanceFromNib(nibNamed: NibConstants.SettlementDetailsViewNib)
settlementDetailsContentView.frame = settlementDetailsView.bounds
settlementDetailsView.addSubview(settlementDetailsContentView)
这里的settlementDetailsContentView包含了在Interface中设计的 View build 者。 settlementDetailsView 是在我的 View Controller 中定义的 View ,其高度约束大于或等于零。
下面的代码是根据 nib 名称返回 View 的函数
class func instanceFromNib(nibNamed : String) -> SettlementDetailsView
{
return UINib(nibName: nibNamed, bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! SettlementDetailsView
}
我所做的问题是 settlementdetailsview 下面的 View 与此重叠,因为 View 高度没有根据 subview 调整大小。
This is how the UI looks.Claim documents overlapping on settlementDetails view.
This is how the uiview should look like
最佳答案
问题是您没有更改 settlementDetailsView
的框架。在下面的代码中
let settlementDetailsContentView = SettlementDetailsView.instanceFromNib(nibNamed: NibConstants.SettlementDetailsViewNib)
settlementDetailsView.addSubview(settlementDetailsContentView)
settlementDetailsContentView.translatesAutoresizingMaskIntoConstraints = false
settlementDetailsContentView.topAnchor.constraint(equalTo: settlementDetailsView.topAnchor).isActive = true
settlementDetailsContentView.bottomAnchor.constraint(equalTo: settlementDetailsView.bottomAnchor).isActive = true
settlementDetailsContentView.trailingAnchor.constraint(equalTo: settlementDetailsView.trailingAnchor).isActive = true
settlementDetailsContentView.leadingAnchor.constraint(equalTo: settlementDetailsView.leadingAnchor).isActive = true
你限制 subview 增长到 superView 的完整大小或者 superView 缩小到 subview 的大小(这取决于 superview 的约束和两者的拥抱/压缩,但应该给你的愿望影响)。
参见 autolayout引用
编辑
现在您已经发布了它应该是这样的,下面的代码完成了:
let superView = settlementDetailsView.superview!
let settlementDetailsContentView = SettlementDetailsView.instanceFromNib(nibNamed: NibConstants.SettlementDetailsViewNib)
superview.addSubview(settlementDetailsContentView)
settlementDetailsContentView.translatesAutoresizingMaskIntoConstraints = false
settlementDetailsContentView.topAnchor.constraint(equalTo: settlementDetailsView.bottomAnchor).isActive = true
settlementDetailsContentView.bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true
settlementDetailsContentView.trailingAnchor.constraint(equalTo: superview.trailingAnchor).isActive = true
settlementDetailsContentView.leadingAnchor.constraint(equalTo: superview.leadingAnchor).isActive = true
请注意,如果 settlementDetailsView
对其 superView 有底部约束,您应该停用它。
关于ios - 根据从 xib 文件加载的 subview 调整 UIView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46175219/