在我的原型单元中,我有一个水平的堆栈视图,并将其连接到UITableViewCell,并在UITableViewCell中定义了一个将多个图像添加到堆栈视图的更新函数,然后我在TableViewController中调用了该函数cellForRowAt,但没有任何反应。
//inside UITableViewCell
@IBOutlet weak var lineStack: UIStackView!
func update(_ imageName: String){
let numberOfCopies = Int(deviceWidth/50)
let startX = (Int(deviceWidth) - (numberOfCopies*50))/2
xValue = xValue + startX
let image = UIImage(named: imageName)
for _ in 1...Int(numberOfCopies) {
xValue = xValue + heightValue
let imageView = UIImageView(image: image)
imageView.frame = CGRect(x: xValue , y: 0, width: widthValue, height: heightValue)
lineStack.addSubview(imageView)
}
}
//inside TableViewController
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Line", for: indexPath) as! LineTableViewCell
let imageName = imagesName[indexPath.row]
cell.update(imageName)
return cell
}
答案 0 :(得分:0)
对于该行:
lineStack.addSubview(imageView)
您需要使用addSubview()
来代替addArrangedSubview()
。前者是向视图中添加子视图的常规方法,而后者是专门用于UIStackView
的,它告诉视图正确插入它。
答案 1 :(得分:0)
您的帖子表明您希望图像50 x 50
个点...对.addArrangedSubview()
使用自动布局约束:
class TestCell: UITableViewCell {
@IBOutlet var lineStack: UIStackView!
func update(_ imageName: String) {
let numberOfCopies = Int(deviceWidth/50)
let image = UIImage(named: imageName)
for _ in 1...Int(numberOfCopies) {
let imageView = UIImageView(image: image)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.widthAnchor.constraint(equalToConstant: 50).isActive = true
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true
lineStack.addArrangedSubview(imageView)
}
}
}
编辑示例结果,堆栈视图水平居中:
堆栈视图设置为:
Axis: Horizontal
Alignment: Fill
Distribution: Fill
Spacing: 0
这是有约束的布局:
请注意,堆栈视图的宽度约束为10
,但其优先级为250
...允许堆栈视图水平拉伸,同时使IB满足约束条件。>