UIStackView 내부에 추가 된 뷰에 선행 패딩을 추가하는 방법
이것은 내 설정입니다. UIScrollView
0으로 설정된 선행, 상단, 시도 에지가 있습니다.이 안에이 UIStackView
제약 조건을 추가합니다 .
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
스택 뷰 안에 몇 가지 뷰를 추가합니다.
내 문제는 제약으로 인해 스택 뷰에 추가 된 첫 번째 뷰도 리딩 엣지 = 0을 갖게된다는 것입니다.
첫 번째 뷰에 패딩을 추가 할 수있는 방법은 무엇입니까? 스크롤 뷰 제약을 조정하지 않고.
제공 한 솔루션은 (질문에서 원하는대로) UIStackView 내부에 뷰에 패딩을 추가하지 않지만 UIStackView에 대한 선행을 추가합니다.
해결책은 원래 UIStackView 내부에 다른 UIStackView를 추가하고이 새로운 UIStackVIew를 유도하는 것입니다. 그런 다음이 새로운 UIStackView에 뷰를 추가합니다.
힌트, 당신은 완전히 Interface Builder를 사용하여 할 수 있습니다. 즉, 코드를 작성할 필요가 없습니다.
경우 isLayoutMarginsRelativeArrangement
속성이 참 스택 뷰 레이아웃 마진에 대하여 그 배치 뷰 레이아웃된다.
stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
stackView.isLayoutMarginsRelativeArrangement = true
그러나 스택 뷰 내부의 모든 정렬 된 뷰에 영향을줍니다. 이 패딩을 하나의 정렬 된 뷰에만 적용하려면 중첩 된 뷰를 사용해야합니다.UIStackView
제약 조건이 스택 뷰 내에서 작동하지 않거나 다소 이상하게 보입니다.
(예를 들어 이미지 스택 뷰에서 선택한 항목에 선행 / 후행 제약 조건을 추가하면 collectionview에도 선행을 추가하지만 후행을 추가하지는 않으며 확실히 충돌합니다).
stackview 내의 모든보기에 대한 레이아웃 여백을 설정하려면 다음을 선택합니다.
Stack View > Size Inspector > Layout Margins > Fixed
참고 : 스크린 샷에서 볼 수 있듯이 "Fixed"
옵션은 이전에라고했습니다 "Explicit"
.
그런 다음 패딩을 추가하십시오.
What worked for me is to add to stack view another UIView that's just a spacer (works at least with stackView.distribution = .Fill):
let spacerView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
stackView.addArrangedSubview(spacerView)
stackView.addArrangedSubview(viewThatNeedsSpaceBeforeIt)
stackView.addArrangedSubview(NextView)...
swift 3: You just need set offset by:
firstView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 200).isActive = true
Be sure this constraint set after you parentView.addArrangdSubView(firstView)
If you only need leading padding, then you can set the stack view's Alignment to "Trailing" and then you will be free to specify unique Leading constraints on each of its contained subviews.
As a bonus, you can also set the stack view's alignment to "Center" and then you can use Leading and/or Trailing constraints to give each item its own padding on both sides.
이 질문에는 이미 좋은 답변이 있습니다. 한 가지 제안은 spacing
속성을 사용 하여보기 사이의 간격을 설정합니다. 첫 번째 및 마지막 뷰의 경우 두 가지 옵션이있을 수 있습니다. @tolpp가 제안한대로 삽입을 설정하거나 패딩을 추가하기 위해 상수를 사용하여 부모 (stackview)에 제약 조건을 추가합니다.
우리가 한 일은 UIStackView의 첫 번째 자식과 마지막 자식으로 투명한 구성 요소 (예 : UIButton / UIView)를 추가하는 것입니다. 그런 다음 이러한 보이지 않는 자식의 너비를 제한하여 패딩을 조정합니다.
해결책은 매우 간단한 것 같습니다. 대신에:
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
나는 방금 썼다.
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor, constant: 15).active = true
'Programming' 카테고리의 다른 글
Android 알림이 표시되지 않음 (0) | 2020.08.19 |
---|---|
txt 파일의 각 줄을 새 배열 요소로 읽습니다. (0) | 2020.08.19 |
grunt : 터미널에서 실행할 때 명령을 찾을 수 없음 (0) | 2020.08.19 |
Maven은 왜 그렇게 나쁜 담당자를 가지고 있습니까? (0) | 2020.08.19 |
한때 마음에 들었던 프로그래밍 관행에 대해 마음이 바뀌 었습니까? (0) | 2020.08.19 |