在UISTackView中使用自定义Xib

Ore*_*ex0 6 xcode ios swift

我试图通过仅构建一个可重复使用的XIB而不是构建三个视图以放入stackView来使生活更轻松

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

我的Xib文件称为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"
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

我试图在其中添加subViews的StackView的高度限制也> = 200(最少一张卡),但似乎并没有随着添加的更多卡来调整大小。对齐方式是填充和分布:等距

我尝试过处理包含评论的StackView的约束和对齐属性,但是最接近的我是重叠的Views。

我创建视图并将其添加到堆栈视图的方式:

        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)
Run Code Online (Sandbox Code Playgroud)

根据我对这个堆栈问题 的了解,StackView的视图高度有问题吗?我尝试了大多数建议的解决方案,但遇到了不同的问题。

我试图得到的结果:

想要的结果

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

小智 0

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

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

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

要详细了解,您可以按照我的回答/sf/answers/4056816221/