【问题标题】:iOS9: Centering programmatically added view inside another programmatically added viewiOS9:在另一个以编程方式添加的视图中居中以编程方式添加的视图
【发布时间】:2015-12-09 15:39:19
【问题描述】:

我有一个水平堆栈视图。我以编程方式将 UIViews 添加到 stackview 中。添加的 UIView 还包含第三个视图,即 UIImageView。 UIImageView 以编程方式缩放到更小的尺寸(高度 = 宽度 = 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。三个 UIView 位于一个水平的 stackview 中。

【问题讨论】:

    标签: ios uiview uiimageview ios9


    【解决方案1】:

    我确信您可以使用自动布局来做一些事情,但是当您有一个需要在其中定位的子视图的视图时,我认为子类化 UIView 是一种更好的方法。 (这两种方法不是唯一的,如果需要,您可以在子类中使用自动布局)

    您的包装视图可能是以下 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 居中。

    【讨论】:

    • 这确实是我出于某种原因试图避免的一个聪明的解决方案。我想在 iOS 中子类化视图并不是那么糟糕。
    • 子类化无处不在,对于 UIView.. :) class UILabel : UIView -- UIButton : UIControl -- UIControl : UIView ....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多