프로그래밍 방식으로 인스턴스화 된 텍스트 필드를 내 viewcontroller에 추가 할 때 을 두 번, 텍스트 뷰를 초기화 할 때 및 viewDidLoad()
을 호출 할 때만 작동하도록했습니다. 이니셜 라이저에서 하나를 제거하면 충돌이 발생하고 viewDidLoad()
에서 제거하면 텍스트 필드가 나타나지 않습니다.느린 인스턴스화 된 UI보기를 사용하여 컨트롤러를 두 번보기 위해 하위 뷰를 추가해야 함
class VC: UIViewController {
override func viewDidLoad() {
view.addSubview(textField)
view.setNeedsUpdatedConstraints)
}
lazy var textField: UITextField! = {
let field = UITextField()
field.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(field)
field.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
field.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
field.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.8).isActive = true
field.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.1).isActive = true
return field
}()
}
viewDidLoad()
에서 view.addSubview(textField)
을 제거하면 오류가 발생,하지만 아무것도 나타하지 않습니다. 초기화 프로그램에서 view.addSubview(field)
을 제거하면 다음 오류로 인해 충돌이 발생합니다. Unable to activate constraint with anchors <NSLayoutXAxisAnchor:0x600000469380 "UITextField:0x7fc931023600.centerX"> and <NSLayoutXAxisAnchor:0x600000469480 "UIView:0x7fc92f60c690.centerX"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.
두 호출이 모두 필요한 이유는 무엇입니까? 이로 인해 문제가 발생합니까? 이 일을하는 더 좋은 방법은 무엇일까요? 감사.
'textField'가 선언 된 곳은 어디입니까? – rmaddy
이 예제의 변수 이름을 잊어 버렸습니다. whoops –
초기화 프로그램에서 제거 할 때 오류가 무엇입니까? 질문에 오류를 넣으십시오 (주석이 아님). – rmaddy