在UISTackView

时间:2018-02-01 09:12:45

标签: ios swift xcode

我试图通过构建一个xib来重用而不是构建三个视图来放入stackView来让我的生活更轻松

我创建了自定义xib文件并将其连接到自己的自定义类:

My Xib File called UserReview.xib

标签和图像由约束条件放置。我希望标签能够自动调整大小,最多三行,因此标签的高度限制为> =,以及内容视图也可以按比例缩放(> =)

UserReview代码:

class UserReview: UIView {

@IBOutlet weak var userImage: UIImageView!
@IBOutlet weak var username: UILabel!
@IBOutlet weak var userRating: UILabel!
@IBOutlet weak var reviewText: UILabel!
@IBOutlet weak var prosText: UILabel!
@IBOutlet weak var consText: UILabel!

class func instanceFromNib() -> UIView {
    return UINib(nibName: "UserReview", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
}

func setUp(review: Review){
        // TODO set userImage
        username.text = review.username!
        // TODO add rating + color
        reviewText.text = review.content!
        if let pros = review.positive_points {
            prosText.text = pros
        } else {
            prosText.text = "No Positive Points"
        }
        if let cons = review.negative_points {
            consText.text = cons
        } else {
            consText.text = "No Negative Points"
        }

    }

}

我试图添加子视图的StackView也有一个> = 200(最小一张卡)的高度限制,但似乎没有添加更多卡的大小调整。对齐是填充和分布:等间距

我尝试过使用包含评论的StackView的约束和对齐属性,但最接近的是可以重叠的视图..

我为堆栈视图创建和添加视图的方式:

        let review1 = UserReview.instanceFromNib() as! UserReview
        let review2 = UserReview.instanceFromNib() as! UserReview
        let review3 = UserReview.instanceFromNib() as! UserReview

        self.reviewStack.addArrangedSubview(review1)
        self.reviewStack.addArrangedSubview(review2)
        self.reviewStack.addArrangedSubview(review3)

据我所知stack question StackView有视图高度问题吗? 我尝试了大多数建议的解决方案,但遇到了不同的问题..

我想要得到的结果:

Wanted Result

(由于某种原因,图像消失了,稍后会检查。)

1 个答案:

答案 0 :(得分:0)

首先从UIStackView删除高度限制,因为StackView始终根据其内部视图扩展其高度。

将StackView的所有4个侧面约束设置为其超级视图,并将固有大小设置为占位符。

现在,以与现在相同的方式将UIView添加到堆栈视图。不要为任何UIView标签和UIView本身设置高度限制。只要确保您已设置最上面的元素的顶部约束和最下面的元素的底部约束即可。通过这种方式,自动布局可以了解如何根据其约束和内容来增加所有元素的高度。

要获得详细的了解,您可以按照我在https://stackoverflow.com/a/57954517/3339966上的回答