IT story

Xcode 6 스토리 보드의 "여백에 구속"이란 무엇입니까

hot-time 2020. 4. 6. 08:11
반응형

Xcode 6 스토리 보드의 "여백에 구속"이란 무엇입니까


자동 레이아웃 및 제약 조건으로 작업 중이며 Constrain to marginsXcode 6에는 Xcode 5에는 없었으며 기본적으로 확인되는 옵션이 있습니다.

테스트 프로젝트를 만든 다음 UITableView뷰와 동일한 크기로 프레임을 설정하고 제약 조건을 추가하여 ViewController에를 추가했습니다 .

Xcode 6 tableview에는 view와 동일한 프레임이 있지만 Xcode 5는 간격을 0으로 추가하는 것이 좋습니다.

여백에 대한 구속 조건이 선택된 상태

이제 "여백에 제약"옵션을 선택 취소하면 Xcode 5와 동일하게 작동하며 0을 제약 조건으로 추가하는 것이 좋습니다.

제한되지 않은 여백에 구속

또한 Constrain으로 제약 조건을 추가하여 여백을 확인하면 더 이상 Xcode 5에서 스토리 보드 파일을 열 수 없으므로 Xcode 6의 새로운 기능입니다.

잘만되면 내 질문을 올바르게 설명 할 수 있기를 바랍니다. 나는 "여백에 대한 제약"이 실제로 무엇을하고 언제 사용해야하는지 그리고 사용하지 않아야하는지 이해하고 싶습니다. 그것이 매우 간단하고 명백한 것이면 사과드립니다.

편집하다

토론에서 레이아웃 여백에 대해 뭔가를 찾았습니다 . 이와 관련이 있는지 궁금합니다.


나는 왜 사람들이 " 여백이 iOS 8 이전의 어떤 것에 대해서도 명백한 충돌을 일으킬 것이라고 불평하고 있습니다. "

XIB 파일 또는 스토리 보드에 여백에 상대적으로 제약 조건을 설정하는 것은 하지 않습니다 iOS7에에 앱 충돌을하고, 그것을 하지 않습니다 당신의 iOS7에 장치에 UI의 차이를 어느만큼 당신이 접촉하지 않는 UIView.layoutMarginsUIView.preservesSuperviewLayoutMargins코드에서 속성을.

iOS8의 여백은 무엇입니까

레이아웃 마진은 주위에 패딩을 나타내는 내부UIView간격이 뷰와 서브 뷰의 가장자리 사이에 남아 있는지 확인 - 하위 뷰를 배치 할 때 레이아웃 시스템에서 사용할 수있는. 이와 관련하여 CSS의 블록과 관련된 패딩 속성과 매우 유사합니다.

여기에 이미지 설명을 입력하십시오

기본적 UIView으로 각 측면에 레이아웃 여백이 8 포인트이며 Interface Builder 에서 변경할 수 없습니다 . 그러나 UIView.layoutMarginsiOS8에서만 사용할 수있는 코드 에서 속성 을 설정하면 이 값을 조정할 수 있습니다.

Editor> Canvas> Show Layout Rectangles를 사용 하여 IB에 여백을 표시 할 수 있습니다 . 여기에 이미지 설명을 입력하십시오

여백을 사용하여 뷰와 하위 뷰를 레이아웃 할 수 있습니다. 모든는 UIView기본적으로 마진와 함께,하지만 당신은 여백과 관련된 제약 조건을 설정할 때 그들은 단지보기 배치에 영향을 미칩니다.

여백을 사용하는 방법

Interface Builder에서 여백을 사용하는 유일한 방법은 제약 조건을 구성하는 동안 여백에 상대적 옵션 을 확인하는 것 입니다. 이것은 뷰를 배치 할 때 가장자리 대신 여백사용 하도록 제약 조건을 지시하는 방법 입니다.

여기에 이미지 설명을 입력하십시오

뷰와 서브 뷰 사이에 주요 제약 조건을 설정하는 네 가지 방법을 살펴 보겠습니다. 각 제약 조건에 대해 설명첫 번째 연관은 서브 뷰의 선행이 되고 두 번째는 슈퍼 뷰의 주요이됩니다 . 주의해야 할 것은 각 구속 조건 끝의 여백에 상대적 옵션의 체크 및 체크 해제 상태입니다. 이는 구속 조건이 뷰의 여백 또는 가장자리에 연결되어 있는지를 정의하기 때문입니다.

  1. 첫 번째 항목 (체크 해제), 두 번째 항목 (체크) :이 경우 하위 뷰의 왼쪽 가장자리가 슈퍼 뷰의 왼쪽 여백에 정렬되어야한다고 선언합니다 (그림 참조).

여기에 이미지 설명을 입력하십시오

  1. First item(uncheck), second item(uncheck): Both using edge, not margin. In this case, we're declaring that subview's left edge should align to superview's left edge.

여기에 이미지 설명을 입력하십시오

  1. First item(check), second item(uncheck): In this case, we're declaring that subview's left margin should align to superview's left edge. This kind of layout actually makes the subview overlap the superview.

여기에 이미지 설명을 입력하십시오

  1. First item(check), second item(check). This actually has a same effect as case 2, since both subview and superview has a same default margin. We're declaring that subview's left margin should align to superview's left margin.

여기에 이미지 설명을 입력하십시오

What is good about Margins

This new feature (iOS8) only impacts UI development if you decide to use margins.

By using margins you can adjust the placement of multiple subviews that share a common relation to a shared superview by changing the value of a single property. This is a clear win over setting all associated constraints with fixed values, because if you need to update all the spacing, instead of changing each value one by one, you can simultaneously modify all relevant placement by updating the superview's margin with a single line of code like this one:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

To illustrate this benefit, in the following case all subviews' left edges are aligned to their superview's left margin. Thus, changing superview's left margin will affect all subviews at the same time.

여기에 이미지 설명을 입력하십시오


In iOS 8 you now have the option to define your constrains relative to a predefined margin to the superview's bounds, instead of the superview's bounds themselves. Yes, it is totally related to the layout margins you pointed to in the docs. One advantage is that you may redefine your margins dynamically, or differently for each kind of device, and the layout will be updated correspondingly without modifying the constraints.

When to use it: when you want to take advantage of this new flexibility.

When to NOT use it: for any app targeted to run on iOS 7 or below.


The property on UIView is: layoutMargins. See the Apple Docs. Basically if the layout margins are 8,8,8,8 (the default), a constraint with 0 leading space to container margin will have an x position of 8. Note that this is only available on iOS8 or later.

For everyone who doesn't want their constraints to go to the container margin:

CTRL+click+drag to show the constraint creation popup.

If the menu shows to create the constraint to the margin by default, hold down option/alt to allow the constraint to be made to the container and not the container margin.

Now it will show the option to create the constraint NOT to the margin. This is WAY faster in my usage.

참고 URL : https://stackoverflow.com/questions/25807545/what-is-constrain-to-margin-in-storyboard-in-xcode-6

반응형