【发布时间】:2017-05-29 17:17:40
【问题描述】:
我正在尝试获取一个包含多个 UIImageViews 的自定义照片容器以适合我的 tableview 单元格。视图包含可变数量的图像 (1 ~ 9),它的高度会相应地变化从 1x 到 3x imageHeight。
我使用 AutoLayout 来定义顶部/底部/前导/尾随边距,其中包含 tableview 和自定义 UIView,并启用自调整单元格,我已设置
tableView.estimatedRowHeight = X
tableView.rowHeight = UITableViewAutomaticDimension
我用
初始化这些单元格tableView.register(nib: forCellReuseIdentifier:)
在tableView(_ tableView: cellForRowAt:) 方法中,我设置单元格:
let cell = tableView.dequeueReusableCell(
withIdentifier: "test9cell",
for: indexPath) as! SocialFeedTableViewCell
cell.photoContainer.setup(with: urls)
cell.photoContainer.loadImages()
return cell
setup() 用 URL 钩住容器中的每个 imageView
func setup(with urls: [URL]) {
self.imageUrls = urls
for i in 0 ..< urls.count {
let imageView = UIImageView(frame: CGRect.zero)
self.addSubview(imageView)
self.imageViews.append(imageView)
}
self.setNeedsLayout()
}
func loadImages() {
self.imageViews.forEach { imageView in
imageView.frame = // Calculate position for each subview
imageView.sd_setImage(...) // Load web image asynchronously
}
}
为视图定义intrinsicContentSize:
override var intrinsicContentSize {
let frameWidth = self.frame.size.width
var frameHeight: CGFloat
switch self.imageUrls.count { // range from 1...9
case 1...3:
frameHeight = frameWidth / 3
case 4...6:
frameHeight = frameWidth / 3 * 2
default:
frameHeight = frameWidth
return CGSize(frameWidth, frameHeight)
}
override func layoutSubviews() {
super.layoutSubviews()
self.imageViews.forEach { imageView in
imageView.frame = // Calculate position for each subview
}
}
这里的问题是:在我设置了初始的intrinsicContentSize 之后,容器的框架大小在layoutSubviews() 中发生了变化。虽然到那时我可以正确定位 imageView 子视图,但单元格高度不会再改变了。
希望我不会让这个问题变得更加混乱。有人可以指出在修改其 UIView 子视图的内容后如何调整单元格高度?谢谢!
【问题讨论】:
标签: ios objective-c swift xcode uitableview