简体   繁体   中英

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

App crash when add some views (ie UIView, UITextView, UIImageView, ...) to main view

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)
    }


}

How to create views by programmatically?

Edit: I forgot to add the view before setting constraints. So you need to set constraints after adding subviews.

You must set constraints after view.addSubview like this :

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
    }

}

First you need to add view.addSubview(textview) then add constraints.

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
            }
        }

You need to add subview first view.addSubview(textview) before adding constraints and set height and width also for textview as you can see updated code:

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


    }


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM