AutoLayout 구속 전환
3778 단어 AutoLayoutSwiftiOS
그럼에도 불구하고 여러 개의 부품으로 구성된 화면을 만들면 번거로워지기 때문에 스토리보드에서 제약을 설정하는 경우가 많다.
많은 경우 Storyboard에서 AutoLayout의 제약을 설정하고 끝내는 경우가 많았지만 이번에는 화면을 만들 때 TableView의 각 셀에 대한 제약을 변경하는 장면이 나왔기 때문에 Storyboard의 제약을 최대한 사용하고 필요한 곳에서만 원본 코드의 AutoLayout을 전환했습니다.나는 그 내용을 총결하고 싶다.
환경
Xcode10.2(Swift5.0) 환경에서 요약합니다.
1. 화면 구성
다음 화면을 바탕으로 자동 레이아웃 제약의 전환을 설명합니다.
화면 이미지
화면은 TableView에서 만들어지지만 셀에 따라 레이아웃 정보가 있습니다. 제목은 왼쪽 아래에 있을 때도 있고 중앙에 있을 때도 있습니다.
NSLayoutAnchor에서 아래 제약조건 (bottomAnchor 설정) 과 중간 제약조건 (centerYanchor 설정) 을 전환하여 제목 왼쪽 아래/중간 위치 사이에서 수직 위치의 AutoLayout 제약조건을 전환할 수 있습니다.
(화면의 제목은 왼쪽 아래와 중앙에서 글꼴 크기와 정렬을 변경하여 설명을 생략합니다.)
2. Storyboard의 설정
우선, 나는 원본 코드로 판면 디자인 정보에 따라 제목 위치의 왼쪽 아래와 중앙의 제약에 따라 전환하고 싶다.다만, AutoLayout의 제약은 평소에 Storyboard로 설정하는 것이 익숙하지 않아서 원본 코드로 쓰는 것이 익숙하지 않다. 앞으로 레이아웃 정보가 증가하고 제목의 위치가 추가되는 상황에서 좀 번거롭다. 갑자기 Storyboard로 제약을 만들려고 하면 전환할 수 없다.
그리고 여러 가지 조사를 실시했다. Storyboard의 제약 설정에 installed라는 항목(아래 화면 이미지 오른쪽 빨간색 테두리 참조)이 있다. 적용하고 싶은 제약 몇 개를 만들었다. 이 installed 항목만 검사하고 제약 하나만 활성화시킨다.다른 제약조건은 비활성 상태일 수 있습니다.(여러 제약조건이 충돌할 수 있으므로 하나의 제약조건만 활성화합니다.)
비활성 상태의 구속은 화면 이미지의 왼쪽에 있는 빨간색 상자처럼 아이콘 색상을 옅게 합니다.
3. 소스 코드에서 구속 전환
Storyboard에서 AutoLayout 구속조건을 만들면 레이아웃 정보에 따라 소스 코드에서 구속조건을 전환합니다.
다음은 예시 코드입니다.
@IBOutlet weak var stackViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var stackViewCenterYConstraint: NSLayoutConstraint!
// (途中省略) //
func updateTitlePosition() {
// タイトルとリンクボタンの表示位置
switch position {
case .center:
stackViewBottomConstraint.isActive = false
stackViewCenterYConstraint.isActive = true
case .bottomLeft:
stackViewCenterYConstraint.isActive = false
stackViewBottomConstraint.isActive = true
}
}
생성된 구속조건을 IBOutlet의 구속 속성에 연결합니다.updateTitlePosition
의 방법 내 레이아웃 정보(position)에 따라 isActive 속성에서 활동과 비활동을 전환함으로써 제목의 위치를 변경합니다.이렇게 하면 약간 복잡한 제약 설정은 Storyboard로 설정하고 전환 자체는 원본 코드로 기재할 수 있기 때문에 간단하게 진행할 수 있다고 생각합니다.
Reference
이 문제에 관하여(AutoLayout 구속 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lanches_hiromi/items/c4c5c108017ed79ba5d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)