【发布时间】:2018-12-21 22:58:22
【问题描述】:
这应该很容易做到,并且在 android(使用 LinearLayout)中非常容易,但我不知道如何在 ios 中做到。
我有 UIView,我想在其中添加一些动态高度子视图。子视图从 xib 文件加载,包含 2 个具有动态高度的 UILabel。
class Subview: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var title: UILabel!
@IBOutlet weak var desc: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
self.commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.commonInit()
}
fileprivate func commonInit() {
Bundle.main.loadNibNamed("Subview", owner: self, options: nil)
addSubview(contentView)
self.contentView.frame = self.bounds
self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}
}
子视图是这样添加的
var containerView: UIView
func setupView() {
let subview1 = Subview()
subview1.title = "Some title"
subview1.desc = "Some very long description"
self.containerView.addSubview(subview1)
}
问题是在这种情况下,子视图不显示。 如果我添加
subview1.frame = CGSize(width: self.bounds.width, height: 100)
子视图显示但高度 100 不正确
如果我尝试计算子视图大小
let measuredSize = subview1.sizeThatFits(CGSize(width: self.bounds.width, height: CGFloat(MAXFLOAT)))
测量的宽度和大小为 0。
知道我在这里做错了什么吗?谢谢!
【问题讨论】:
-
你试过用构造函数来设置大小吗?
let subview1 = Subview(wantedSize) -
但我不知道wantedSize。大小(高度)应根据内容动态
-
我会在创建视图之前找到一种计算方法,但您也可以在创建视图后立即尝试使用
subview1.translatesAutoresizingMaskIntoConstraints = false。我想知道是否没有生成约束,然后阻止调整框架的大小 -
使用自动布局和约束...比尝试计算矩形和大小更灵活。
-
我的子视图 xib 文件包含约束,但添加到 containerView 时大小不正确。我尝试设置 subview1.translatesAutoresizingMaskIntoConstraints = false 并且子视图现在可见,但它不在 containerView 而不是 multile
标签: ios swift uiview xib ios-autolayout