我有一个水平堆栈视图。我以编程方式将UIViews添加到stackview。添加的UIViews还包含第三个视图,即UIImageView。 UIImageView以编程方式缩放到较小的大小(height = width = StackView的高度)。
我想将UIImageView集中在UIView中。但是在将UIImageView添加到UIView之后,UIView没有分配给它的任何大小,我无法弄清楚如何正确地居中。
我尝试过添加灵活的边距并测试了一些约束。
我还有其他选择吗?
let wrapView = UIView()
let image = images[i]
let imageView = UIImageView(image: image)
imageView.contentMode = .ScaleAspectFit
wrapView.addSubview(imageView)
miniPicturesView.addArrangedSubview(wrapView)
图像相关:蓝色方块应位于矩形的中心。 正方形是UIImageView,矩形是UIView。三个UIViews位于水平堆栈视图中。
答案 0 :(得分:2)
我确定您可以使用自动布局执行某些操作,但是如果您的视图中包含需要定位的子视图,则在我看来,将UIView子类化为更好的方法。 (这两种方法不是独占的,如果你愿意,可以在子类中使用自动布局)
您的wrap视图可以是以下CenterView类的实例:
class CenterView : UIView
{
var subView: UIView
init (fromUIView view: UIView)
{
self.subView = view;
super.init(frame: CGRect(x: 0,y: 0,width: 0,height: 0));
self.addSubview(self.subView);
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews()
{
self.subView.center = CGPoint(x: self.bounds.width / 2, y: self.bounds.height / 2)
}
}
通过将UIImageView传递给构造函数构建CenterView后,它将使UIImageView保持在其自身的中心。