如何将一个 UIView 添加到底部的另一个 UIView
Posted
技术标签:
【中文标题】如何将一个 UIView 添加到底部的另一个 UIView【英文标题】:How to add a UIView into another UIView at the bottom 【发布时间】:2018-01-07 23:15:36 【问题描述】:如何将 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,我好像搞不定这个成功!
【问题讨论】:
使用合适的初始化器来接收一个帧。根据需要添加约束。 嘿?我特别想将图像和背景颜色应用于 UILabel,您的答案不适用于这里吗? 我的评论当然适用。使用正确的初始化程序创建视图会有所帮助。并且使用约束还可以正确调整视图的大小和位置。 rmaddy 我不明白您在这里的参考,请参阅下面我发布的解决方案,以说明我如何使用 Adam 的建议完成 UIView 集成。请进一步详细说明,以便我们更好地了解您的意图。 【参考方案1】:作为一般规则,如果可以避免,您不应该以未记录或意外的方式使用 UIKit 类。在这种情况下,您不知道 UILabel
是否需要一组特定的子视图,或者它是否取决于这些子视图的顺序。
这样做的正确方法是创建新的UIView
子类,其中包含两个视图作为它自己的 子视图。这样,您可以控制视图顺序、位置等,而不必担心UILabel
内部结构将来会发生怎样的变化。
【讨论】:
【参考方案2】:谢谢亚当,我用这个来解决问题。以下是我的解决方案供参考:
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);
非常感谢亚当!!
【讨论】:
以上是关于如何将一个 UIView 添加到底部的另一个 UIView的主要内容,如果未能解决你的问题,请参考以下文章