iOS9:以编程方式添加视图以另一个以编程方式添加的视图

时间:2015-12-09 15:39:20

标签: ios uiview uiimageview ios9

我有一个水平堆栈视图。我以编程方式将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位于水平堆栈视图中。 enter image description here

1 个答案:

答案 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保持在其自身的中心。