我的UIView正在堆叠在彼此之上:
每个UIView都位于wordContainer
内。每个UIView里面都有两个UILabel
我用两个孩子的UILabel创建每个单独的UIView:
var labels = [UIView]()
for word in words {
let wordLabel = UILabel(frame: CGRectZero)
wordLabel.text = word.valueForKey("sanskrit") as? String
wordLabel.numberOfLines = 0
wordLabel.sizeToFit()
wordLabel.translatesAutoresizingMaskIntoConstraints = false
let englishWordLabel = UILabel(frame: CGRectMake(wordLabel.frame.width + 10,0,0,0))
englishWordLabel.text = word.valueForKey("english") as? String)
englishWordLabel.numberOfLines = 0
englishWordLabel.sizeToFit()
englishWordLabel.lineBreakMode = .ByWordWrapping
englishWordLabel.translatesAutoresizingMaskIntoConstraints = false
let wordView = UIView(frame: CGRectMake(0,0,self.view.frame.width,englishWordLabel.frame.height))
wordView.translatesAutoresizingMaskIntoConstraints = false
wordView.addSubview(wordLabel)
wordView.addSubview(englishWordLabel)
wordView.sizeToFit()
labels.append(wordView)
}
然后我拿这个UIView的集合并将它们添加到我的wordContainer
。这是我想象的部分,我应该设置NSLayoutConstraints。我的想法是,我希望他们都能恰当地叠加在一起。例如,它应该如下所示:
word: definition
word: definition
word: definition
word: definition
但它看起来像这样:
我将它们添加到wordContainer
中,如此:
let wordContainer = UIView(frame: CGRectZero)
var currentY:CGFloat = 0.0
let margin_height:CGFloat = 4.0
var height:CGFloat = 0
for view in wordViews {
var rect = view.frame
rect.origin.y = currentY
view.frame = rect
currentY += view.frame.height
height += view.frame.height
wordContainer.addSubview(view)
}
let containRect = CGRectMake(0,0,self.view.frame.width, height)
wordContainer.frame = containRect
然后我为wordContainer
设置约束,如果它们没有堆叠在一起,它们有效地允许所有单词的空间存在:
wordContainer.bottomAnchor.constraintEqualToAnchor(cell.contentView.bottomAnchor).active = true
wordContainer.topAnchor.constraintEqualToAnchor(cell.contentView.topAnchor).active = true
我最近的想法是,也许我应该为此添加约束。我已尝试将NSLayoutConstraints
添加到cell
的高度,当我执行所有单词时,不再适当地布置。相反,它们堆叠在彼此之上。但这似乎是正确的方向..
答案 0 :(得分:2)
为了让单元格自动调整其高度,contentView中的内容必须对contentView的所有4个边缘都有约束。
我自己刚刚使用不同的单元格类型来处理文本,图像和嵌入式推文,并且遇到了一些您已经描述过的问题。我发现最简单的方法是在内容视图中的任何组件周围添加视图,然后您可以轻松地将约束添加到该元素周围。
我只是快速浏览一下可以证明这一点的内容,并找到了另一个SO answer,用一些屏幕截图解释了它。
我今天这样做的参考资料还是This post on Ray Wenderlich's site
答案 1 :(得分:0)
在UITableViewController
viewDidLoad()
中,尝试:
//set up table view cell dynamic height
tableView.rowHeight = UITableViewAutomaticDimension
在故事板中,确保使用AutoLayout,并设置并修复了单元格元素对superview的所有约束。例如,单元格的顶部文本必须具有Superview定义的边距并设置为值。