ios - 根据从 xib 文件加载的 subview 调整 UIView 的大小

标签 ios swift uiview uiviewcontroller

我有一个 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 view looks.

This is how the uiview should look like

enter image description here

最佳答案

问题是您没有更改 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/

相关文章:

ios - 为什么将我的 float 转换为整数会使数字变为负数?

ios - "Upload missing required dSYMs"将结构迁移到 Firebase

ios - Xcode11 dyld : Library not loaded . .. 原因:找不到图像

iOS 6 - 如何在方向改变时运行自定义代码

ios - "realistically"在 iOS 模拟器中测试低内存条件的策略

ios - Wkwebview 100%丢包预设

ios - 我怎样才能制作表情符号或输入任何内容

ios - subview 未使用容器的完整 View

ios - 滚动 UITableView 以关闭 UIView Above

swift - 为什么 UIView 和 UIImageView 的动画效果不同?