簡體   English   中英

線程 1:將子視圖添加到主視圖時 AppDelegate 中的信號 SIGABRT 錯誤

[英]Thread 1: signal SIGABRT error in AppDelegate when add subView to main view

向主視圖添加一些視圖(即 UIView、UITextView、UIImageView 等)時應用程序崩潰

import UIKit

class ViewController: UIViewController {

    let textview: UITextView = {
        let textview2 = UITextView()
        textview2.text = "Hello World"
        textview2.font = UIFont.boldSystemFont(ofSize: 18)
        textview2.textAlignment = .center
        return textview2
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        textview.translatesAutoresizingMaskIntoConstraints = false
        textview.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        textview.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        view.addSubview(textview)
    }


}

如何以編程方式創建視圖?

編輯:我忘了在設置約束之前添加視圖。 所以添加子視圖后需要設置約束。

您必須像這樣在 view.addSubview 之后設置約束:

import UIKit

class ViewController: UIViewController {

    let textview: UITextView = {
        let textview2 = UITextView()
        textview2.text = "Hello World"
        textview2.font = UIFont.boldSystemFont(ofSize: 18)
        textview2.textAlignment = .center
        return textview2
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(textview)
        textview.translatesAutoresizingMaskIntoConstraints = false
        textview.heightAnchor.constraint(equalToConstant: 100).isActive = true
        textview.widthAnchor.constraint(equalToConstant: 200).isActive = true
        textview.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        textview.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }

}

首先你需要添加view.addSubview(textview)然后添加約束。

import UIKit

class testViewController: UIViewController {
    let textview: UITextView = {
        let textview2 = UITextView()
        textview2.text = "Hello World"
        textview2.font = UIFont.boldSystemFont(ofSize: 18)
       textview2.textAlignment = .center
        return textview2
    }()
    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(textview)
        textview.translatesAutoresizingMaskIntoConstraints = false
        textview.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        textview.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

      // you need to specify height and width constraints as well otherwise UITextView will not appear
       textview.widthAnchor.constraint(equalToConstant: 100).isActive = true
       textview.heightAnchor.constraint(equalToConstant: 30).isActive = true
            }
        }

您需要在添加約束之前先添加子視圖view.addSubview(textview)並為 textview 設置高度和寬度,因為您可以看到更新的代碼:

import UIKit

class ViewController: UIViewController {

    let textview: UITextView = {
        let textview2 = UITextView()
        textview2.text = "Hello World"
        textview2.font = UIFont.boldSystemFont(ofSize: 18)
        textview2.textAlignment = .center
        return textview2
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(textview)

        textview.translatesAutoresizingMaskIntoConstraints = false
        textview.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        textview.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        textview.widthAnchor.constraint(equalToConstant: 150).isActive = true
        textview.heightAnchor.constraint(equalToConstant: 80).isActive = true


    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM