Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在带有填充的UIStackView中为UIImage指定显式大小? TL;博士 如何在UIStackView中添加填充,就像我们为SwiftUIHStacks添加填充一样 如何使用在UIStackView内部具有明确高度的UIImageView 上下文_Ios_Swift_Xcode_Autolayout_Uistackview - Fatal编程技术网

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
    a
    constraintGreaterThanOrEqualTo
    约束

将其设置为自动布局。将图像视图设置为:

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’别忽视了!我要回到这里来测试一下!