如何将UIView添加到底部的另一个UIView中

时间:2018-01-07 23:15:36

标签: ios uiview uikit

如何将UIView插入UILabel?

目标:

单独创建UIView现有UI组件的背景。

示例

    //Views
    let viewOne = UIImageView(); //bottom view, e.g. a UIImageView
    let viewTwo = UILabel();     //top view, e.g. a UILabel

    //Traditional
    self.addSubview(viewOne);
    self.addSubview(viewTwo);   //viewTwo goes on top 

    //Target
    viewTwo.addSubview(viewOne);
    self.addSubview(viewTwo;    //goal is to encapsulate viewOne into viewTwo

问题

如何将viewOne插入viewTwo的底部?你是否使用了一层viewOne,我似乎无法取得成功!

2 个答案:

答案 0 :(得分:3)

作为一般规则,如果可以避免,则不应以未记录或意外的方式使用UIKit类。在这种情况下,您不知道UILabel是否需要一组特定的子视图,或者它是否取决于这些子视图的顺序。

执行此操作的正确方法是将包含两个视图的新UIView子类创建为它自己的子视图。这样,您就可以控制视图顺序,位置等,而无需担心将来UILabel内部结构如何变化。

答案 1 :(得分:0)

谢谢Adam,我用它来解决问题。这里是我的解决方案:

class TexturedLabel :  NSObject {
    var label     : UILabel;
    var imageView : UIImageView;

    override init() {
        label     = UILabel();
        imageView = UIImageView();
        super.init();
        imageView.image = UIImage(named:"textured");  /* grab texture img                                   */
        imageView.contentMode = .topLeft;             /* place the image in the upper left corner unscaled  */
        imageView.clipsToBounds = true;               /* constrain image to frame boundaries                */
    }

    func text(_ text:String)                            { label.text = text; }
    func font(_ font:UIFont?)                           { label.font = font; }
    func color(_ color:UIColor)                         { imageView.backgroundColor = color;
    func frame(_ frame:CGRect)                          { label.frame = frame; imageView.frame = frame; }    
    func textColor(_ textColor:UIColor)                 { label.textColor = textColor; }
    func textAlignment(_ textAlignment:NSTextAlignment) { label.textAlignment = textAlignment; }
    func numberOfLines(_ numberOfLines:Int)             { label.numberOfLines = numberOfLines; }
    func lineBreakMode(_ lineBreakMode:NSLineBreakMode) { label.lineBreakMode = lineBreakMode; }

    func addToView(_ view : UIView) {
        view.addSubview(self.imageView);
        view.addSubview(self.label);
    }
}

非常感谢Adam !!