【问题标题】:When inheriting UIView and creating an instance for the new class, it does not create a view继承UIView并为新类创建实例时,不创建视图
【发布时间】:2019-07-15 04:59:42
【问题描述】:

我创建了一个继承 UIView 的新类。当我创建新类的实例时,似乎没有创建视图。 这是我的课。

class QuestionView: UIView {

    var metrics : [String : CGFloat] = [:]

    override init(frame : CGRect){
        super.init(frame: frame)
        self.backgroundColor = UIColor.blue
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

这里我创建了这个类的一个实例,具有以下值

x = 0,y = 屏幕中间,width = 与屏幕一样宽, 身高 = 400

class mainView : UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var questionView = QuestionView(frame: CGRect(x: 0, y: self.view.frame.height/2, width: self.view.frame.width, height: 400))
        self.view.addSubView(questionView)
    }
}

我发现没有创建视图。

【问题讨论】:

  • 你的意思是视图在屏幕上不可见?您需要先将其添加到视图层次结构中。
  • 是的,视图不可见。 @pckill
  • 你在使用xib吗?你需要先加载它
  • 不,@Shruti 我不是。
  • 您能否检查您的视图是否在前景中,或者它可能隐藏在任何其他子视图后面。您可以使用调试器检查视图层次结构

标签: ios swift uiview addsubview


【解决方案1】:

mainView类的viewDidLoad方法中添加子视图(questionView)。

self.view.addSubview(questionView)

你也可以通过设置背景颜色来测试视图

questionView.backgroundColor = UIColor.red

【讨论】:

  • @ReshmaSuresh,你有任何与 QuestionView 关联的xib 吗?
  • 不,我没有使用。
  • @ReshmaSuresh,我试过你的代码,它正在工作。 mainView 中嵌入了另一个视图吗?
【解决方案2】:

您应该添加以编程方式在viewDidLayoutSubView 中创建的所有视图,如下所示

   override func viewDidLayoutSubviews() {
      var questionView = QuestionView(frame: CGRect(x: 0, y: self.view.frame.height/2, width: self.view.frame.width, height: 400))
self.view.addSubView(questionView)
}

【讨论】:

    【解决方案3】:

    尝试以下代码获取前面的视图,使用bringSubviewToFront函数。

    override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            let questionView = QuestionView(frame: CGRect(x: 0, y: self.view.frame.height/2, width: self.view.frame.width, height: 400))
            self.view.addSubview(questionView)
    
            self.view.bringSubviewToFront(questionView)
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2011-12-08
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多