2016-09-15 1 views
0

스위프트 3에서 시각 형식으로 autolayout을 사용하려고 시도했지만 계속 충돌합니다. 아래의 코드는 기본적으로 UIImageView를 스크롤 뷰에 추가하고 스크롤 할 수있게 만듭니다. 그러나, 내가 스크롤 뷰와 이미지 뷰에 제약 조건을 추가하려고 할 때, 응용 프로그램이 충돌 계속, 코드 그래서 내가 수직 제약 조건을 추가 한 부분이 충돌하는 부분입니다Swift 3.0에서 시각 포맷으로 Autolayout 제한을 설정하는 방법

let page1 = createAndAddViewsWith("image1", middleTextLabel: "Welcome to TwisCode") 
    let page2 = createAndAddViewsWith("image2", middleTextLabel: "This is just a practice") 
    let page3 = createAndAddViewsWith("image3", middleTextLabel: "And the button will appear here") 


    pages = [page1, page2, page3] 

    print(pages) 

    let views = ["view": view, "page1": page1.view, "page2": page2.view, "page3": page3.view] 
    let verticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|[p1.view(==view)]|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: views) 
    NSLayoutConstraint.activate(verticalConstraints) 

빠른 2.3에서 잘 작동합니다.

다음은 페이지를 추가하는 기능입니다.

private func createAndAddViewsWith (_ backgroundImage: String, middleTextLabel text: String)-> ContentViewController{ 

    let contentVC = storyboard!.instantiateViewController(withIdentifier: "ContentViewController") as! ContentViewController 
    contentVC.view.translatesAutoresizingMaskIntoConstraints = false 
    contentVC.backgroundImage = UIImage(named: backgroundImage) 
    contentVC.textLabel = text 

    scrollView.addSubview(contentVC.view) 
    addChildViewController(contentVC) 
    contentVC.didMove(toParentViewController: self) 

    return contentVC 


} 
+0

: 나는 원인을 배운 곳

let views = ["nib": nibView!] 

이 포스팅은 무엇입니까? 코드에서 몇 줄로 가리 킵니까? 명시 적으로 래핑 해제와 관련이 있습니까? 자동 레이아웃 경고입니까? 더 많은 정보를 제공하십시오. –

+0

위의 코드에 중단 점을 넣으면 verticalConstraints에 충돌이 발생합니다. 오류가 "NSInvalidArgumentException"이었습니다 - 인식 할 수없는 선택기가 인스턴스 nslayoutconstraint에 전송되었습니다 –

답변

2

문제는보기 배열의 유형으로 인해 나타납니다. 내 경우 :

var nibview: UIView! 
// ... 
let views = ["nib": nibView] // Type: [String: UIView?] 

이 값이 선택하지 않은 보장을 주조를 (하단 하나 constraints.withVisualFormat가 무엇을 기대로 캐스트) 수정 보인다.

let views: [String: UIView] = ["nib": nibView] 
let views: [String: Any] = ["nib": nibView] 

또는보기 배열에 선택적보기가 없어야합니다. (나는 암시 적으로 래핑되지 않은 옵션을 명시 적으로 래핑 (unwrap)해야만했다. 무슨 일이 일어나고 충돌 어떤 종류의
Autolayout issue Xcode 8 [_SwiftValue nsli_superitem]

+0

작동합니다! 고마워. –

관련 문제