Ios 如何在带有填充的UIStackView中为UIImage指定显式大小? TL;博士 如何在UIStackView中添加填充,就像我们为SwiftUIHStacks添加填充一样 如何使用在UIStackView内部具有明确高度的UIImageView 上下文
我有以下情况: 固定在Ios 如何在带有填充的UIStackView中为UIImage指定显式大小? TL;博士 如何在UIStackView中添加填充,就像我们为SwiftUIHStacks添加填充一样 如何使用在UIStackView内部具有明确高度的UIImageView 上下文,ios,swift,xcode,autolayout,uistackview,Ios,Swift,Xcode,Autolayout,Uistackview,我有以下情况: 固定在UITableViewCell的contentView上的containerView。containerView负责显示圆角和背景色 containerView有一个水平stackView作为子视图。stackView有一个UIImageView和一个标签 stackView需要在所有侧面填充8像素 imageView必须是18x18-这就是调试器中出现约束问题的原因,也是autolayout建议打破的约束 我的假设是,autolayout是这样说的——“您希望stackV
UITableViewCell
的contentView
上的containerView
。containerView
负责显示圆角和背景色
containerView
有一个水平stackView
作为子视图。stackView
有一个UIImageView
和一个标签
stackView
需要在所有侧面填充8像素
imageView
必须是18x18
-这就是调试器中出现约束问题的原因,也是autolayout建议打破的约束
我的假设是,autolayout是这样说的——“您希望stackView
是其内容的高度,加上8px的填充,但是imageView
也有一个明确的大小-如果没有足够的空间使imageView
达到该大小怎么办
代码
以下是iconImageView
:
private let iconImageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.adjustsImageSizeForAccessibilityContentSizeCategory = true
imageView.constrainedSize = CGSize(width: iconSize, height: iconSize)
imageView.image = UIImage(image: image)
imageView.tintColor = .color
return imageView
}()
以下是布局代码:
private func setupView() {
contentView.addSubview(containerView)
contentView.pinView(containerView, positions: .all, insets: UIEdgeInsets(top: 0, left: 0, bottom: 4, right: 0))
stackView.addArrangedSubview(iconImageView)
stackView.addArrangedSubview(messageLabel)
containerView.addSubview(stackView)
containerView.pinView(stackView, positions: .all, insets: UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8))
}
我试过的
- 重新安排违禁品
- 为堆栈视图提供明确的高度
- 给予
stackView
aconstraintGreaterThanOrEqualTo
约束
将其设置为自动布局。将图像视图设置为:
private let iconImageView: UIImageView = {
let image = UIImage(named: "yourImage")
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.adjustsImageSizeForAccessibilityContentSizeCategory = true
imageView.image = image
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.widthAnchor.constraint(equalToConstant: 50).isActive = true // set image height
return imageView
}()
现在在viewDidLoad中(在我的示例中)设置label、stackView和约束
override func viewDidLoad() {
super.viewDidLoad()
label.text = "My custom text"
label.textColor = .white
label.font = .systemFont(ofSize: 16, weight: .regular)
let stackView = UIStackView(arrangedSubviews: [iconImageView, label])
stackView.distribution = .fill
stackView.spacing = 10 //your padding
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)
stackView.heightAnchor.constraint(equalToConstant: 50).isActive = true // same constant that imageView width
stackView.widthAnchor.constraint(equalToConstant: 200).isActive = true
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
}
这就是结果:
您需要明确地为单元格指定一个高度(heightForCellAt:
),也可以是。若要在堆栈视图中添加填充,可以在堆栈上使用directionalLayoutMargins
属性。若要删除图像视图周围的调试器警告,只需添加一个空视图作为堆栈的排列子视图,以填充所有未占用的空空间。感谢您的响应,我还没有收到Don’别忽视了!我要回到这里来测试一下!