Programming

UIStackView 내부에 추가 된 뷰에 선행 패딩을 추가하는 방법

procodes 2020. 8. 19. 20:15
반응형

UIStackView 내부에 추가 된 뷰에 선행 패딩을 추가하는 방법


이것은 내 설정입니다. UIScrollView0으로 설정된 선행, 상단, 시도 에지가 있습니다.이 안에이 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 내부의 stackview

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

참고 URL : https://stackoverflow.com/questions/32551890/how-to-add-leading-padding-to-view-added-inside-an-uistackview

반응형