如何将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,我似乎无法取得成功!
答案 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 !!