【问题标题】:How to add a UIView into another UIView at the bottom如何将一个 UIView 添加到底部的另一个 UIView
【发布时间】: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 集成。请进一步详细说明,以便我们更好地了解您的意图。

标签: ios uiview uikit


【解决方案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);
        }
    }
    

    非常感谢亚当!!

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2012-01-25
      • 2017-12-14
      相关资源
      最近更新 更多