Programing

Xcode-프레임을 잃지 않고 한 뷰에서 다른 뷰로 컴포넌트를 드래그하는 방법이 있습니까?

crosscheck 2020. 9. 13. 10:04
반응형

Xcode-프레임을 잃지 않고 한 뷰에서 다른 뷰로 컴포넌트를 드래그하는 방법이 있습니까?


내가하고 싶은 것은 프레임 / 위치를 재설정하지 않고 Xcode의 인터페이스 작성기에서 한 수퍼 뷰에서 다른 수퍼 뷰로 컴포넌트 / 뷰를 드래그하는 것입니다.

이 작업을 수행 할 때 Xcode의 기본 동작은 크기를 유지하면서 새로운 수퍼 뷰에서 수직 및 수평으로 이동되는 뷰를 중앙에 배치하는 것 같습니다. 새로운 수퍼 뷰에서 뷰의 위치를 ​​수동으로 변경해야하기 때문에 매우 실망 스럽습니다. 하지만 이동하기 전에 올바르게 배치 했으므로 Xcode가 너비 / 높이 대신 프레임의 모든 속성을 기억하기를 원합니다. 이게 가능해?


또 다른 해결책 :

  1. 하위보기에서 원하는 항목을 선택한 다음
  2. (도구 모음에서) Editor-> Embed In-> 삽입 할 뷰 유형.

여러분에게 도움이 될만한 것을 찾았습니다!

작업은 "하위보기"를 "상위보기"로 다시 그룹화하여 계층 적으로 상위보기의 하위가되고 작업 전과 같이 디스플레이에 물리적 위치를 유지하는 것입니다.

먼저 부모보기를 조정하여 자식보기 영역을 물리적으로 덮습니다. 둘째, 모든 어린이가보기 목록에서 아래에 있는지 확인하십시오.

이제 마우스로 모든 자식을 선택하고 예를 들어 한 픽셀 위로 이동하고 한 픽셀 아래로 이동합니다 (IB에 약간의 변화가 있다고 말하면). 그 후 석방 된 아이들은 마술처럼 부모의 자식이되어 그들의 위치를 ​​보여줄 것입니다.

OSX 10.8.2 및 Xcode 4.6에서 작동합니다.

행운을 빕니다!


나는 물건을 재배치하는 데 많은 시간을 절약 할 수 있었고 이렇게했습니다.

  1. 인터페이스 빌더의 상위보기를 하위보기와 동일한 수준에 추가합니다.
  2. 텍스트 편집기에서 스토리 보드를 열고 상위보기의 하위보기 태그 안에있는 하위보기를 복사합니다. 저장하면 XCode가 업데이트됩니다.

하지만별로 우아하지는 않지만 XCode가 Shift 등으로 지원하지 않는 이유를 알 수 없습니다.


  1. 하나의 UIView에서 다른 UiView (하위가 아님) 또는 ScrollView로 이동하려는 모든 컨트롤을 선택합니다.

  2. 잘라 내기 / 복사

  3. 이제 새 UIView / ScrollView를 기존 UIView로 드래그 한 후 한 번 클릭하지 말고 새 UIView / ScrollView를 두 번 클릭하고 모든 컨트롤을 붙여 넣습니다.

  4. 거리 차이는 모든 컨트롤간에 동일하게 유지되지만 컨트롤의 위치를 ​​다시 조정해야 할 수도 있습니다. 따라서 위치를 변경할 때까지 아무 곳이나 클릭하지 말고 모든 컨트롤이 이미 선택되어 있으므로 탐색 화살표로 모든 컨트롤의 위치를 ​​변경하거나 다시 선택해야 할 수도 있습니다.

참고 : 나는 XCode 4.2에서


스토리 보드를 사용하지 않고 Stepan의 솔루션과 유사한 작업을 수행했습니다. ViewController의보기가 열려있는 동안 IB에서 :

  1. VC의 기본보기 외에 다른보기 만들기
  2. 모든 하위보기를 한보기에서 다른보기로 드래그하여 두 번째보기로 이동합니다 (왼쪽 목록에서 드래그하면 위치가 재설정 됨). IB에서 마우스를 사용하여 선택할 수없는 경우 왼쪽 목록에서 모두 선택합니다. "cmd"버튼을 사용하여 IB 패널에서 하나의 최종 하위보기를 선택합니다.
  3. 초기 기본보기의 최종보기로 되돌립니다.
  4. 추가 된보기를 모두 제거합니다.

이것은 하위 뷰를 다른 뷰로 복사하고 위치를 유지하는 가장 좋은 솔루션입니다.

  1. 하위보기에서 원하는 항목을 선택한 다음
  2. 편집기-> 삽입 위치->보기
  3. 이보기 복사 (Cmd + C)
  4. 실행 취소 (Cmd + Z) (하위보기를 원했기 때문에)
  5. 하위보기를 원하는보기로 이동하여 붙여 넣기 (Cmd + V)
  6. 복사하여 붙여 넣은 Embedding View를 선택하고 Editor-> Unembed

6 단계는 임베딩 뷰를 제거하고 하위 뷰만 복사합니다.


Xcode Interface Builder는 부모 뷰를 다른 뷰 (UIView, ScrollView, StackView)로 드래그 앤 드롭 할 때 엉망이됩니다.

Q :
뷰 (다른 많은 하위 뷰가 포함되어 있음)를 ScrollView 또는 다른 최상위 뷰에 포함하는 것은 지금까지 본 것과 간단하지 않습니다. 곧 발생하는 일은 원래 프레임을 찾을 수 없기 때문에 모든 하위 뷰가 잘못 배치 된 것처럼 보일 수 있다는 것입니다.

A :
다음 단계를 따르면 가능한 한 쉽게 해결할 수 있습니다.

  1. 하위보기에서 원하는 항목을 선택한 다음
  2. 메뉴 바, Editor-> Embed In-> View로 이동합니다.
  3. 이 새 뷰 (Cmd + C)를 하위 뷰와 함께 복사합니다 (현재 모든 제약 조건이 지금까지 유지되었습니다).
  4. 하위보기를 포함 할보기 (ScrollView 또는 StackView 일 수 있음)로 이동하고 복사 된보기를 붙여 넣습니다 (Cmd + V).
  5. 붙여 넣은 Embedding View (이전에 새로 생성 한)를 선택하고 Xcode, Editor-> Unembed 메뉴 바로 이동합니다.

아니요, 아직 끝나지 않았습니다! 때로는 UI 제약과 관련된 문제가 거의 없다는 것을 경험할 수 있으며 그에 따라 문제를 해결해야합니다.


다른 접근 방식을 발견했습니다. 기본적으로 : Move = Cut + Paste

이렇게하면 :

  • 모든 하위보기를 새 상위보기 (P ')의 하위로 가져옵니다.
  • Auto-Layout 기반 Storyboard에 (거의) 모든 제약 조건 유지
  • 서브 뷰의 상대적 위치 (프레임)를 서로 유지

이렇게하면 다음을 수행 할 수 없습니다.

  • edit Storyboard file in a text editor

Base the thing is that each view except one (root) in Storyboard has its parent view. Next, when you copy/move multiple subviews, you lose frames and constraints.

The answer is pretty simple. You make a copy of your subviews (SVs) by copying their parent view (P) into new parent view (P'). This way you may need to recreate only constraints from that parent new view (P') to its new parent view but not for every subview you wanted to move.

After you did make copy of parent view (P) into new one (P'), from that new view (P') you:

  • remove all the children except ones that you wanted to move
  • recreate new parent (P') constraints
  • recreate possible Interface Builder outlets to (SVs')

And from original parent view (P) you:

  • remove all the children that you wanted to move

Before:

View1

View2

P

SVs-you-want-to-move

SVs-you-do-not-want-to-move

View3

After:

View1

View2

P

SVs-you-do-not-want-to-move

View3

P'

SVs'-you-want-to-move

I should stress that this does not generalise well if you have e.g. UIScrollView as a parent view. Then a copy of it would be again a UIScrollView what may not be desirable.

Another thing is when you do remove some of the subviews (SVs) in original parent view (P), you may need to recreate some constraints if other (non-moveable subviews) reference them. But you should do that anyway.

참고URL : https://stackoverflow.com/questions/11504172/xcode-is-there-a-way-to-drag-a-component-from-one-view-to-another-without-losi

반응형