Xcode - Có cách nào để kéo một thành phần từ chế độ xem này sang chế độ xem khác mà không làm mất khung của nó không?


91

Những gì tôi muốn làm là kéo một thành phần / chế độ xem từ chế độ xem siêu cao này sang chế độ xem siêu khác trong trình tạo giao diện của Xcode mà không cần đặt lại khung / vị trí của nó.

Hành vi mặc định của Xcode khi thực hiện việc này dường như là căn giữa chế độ xem đang được di chuyển theo chiều dọc và chiều ngang trong chế độ xem siêu lớn mới của nó, trong khi vẫn giữ nguyên các kích thước của nó. Điều này cực kỳ khó chịu, vì nó có nghĩa là chế độ xem cần được định vị lại theo cách thủ công trong chế độ siêu xem mới của nó. Nhưng tôi đã đặt nó đúng vị trí trước khi di chuyển, vì vậy tôi muốn Xcode chỉ nhớ tất cả các thuộc tính của khung thay vì chỉ chiều rộng / chiều cao của nó. Điều này có khả thi không?


Vào thời điểm trước đây, nếu bạn cắt và dán khung vẫn giữ nguyên. Hãy thử nó và xem.
David H

Cảm ơn đã gợi ý, tiếc là nó dường như không hoạt động. Hoặc nếu không, tôi chỉ cắt / dán nó sai. Điều xảy ra là XCode thay thế chế độ xem tôi đang cố gắng dán vào bằng chế độ xem tôi đang dán (và nếu tôi cố gắng dán nhiều thứ cùng một lúc, nó chỉ sử dụng mục đầu tiên trong danh sách). Sao chép cũng làm điều tương tự.
aroth

Hãy thử dán nó vào cột bên trái - danh sách. Chọn chế độ xem siêu và sau đó dán. Nếu không, xin lỗi, hết đề xuất.
David H

Đã thử cả hai cách. Không hoạt động. Cuối cùng phải làm điều đó một cách khó khăn.
aroth

Dường như có một cách giải quyết trong stackoverflow.com/questions/12034293/... nhưng nó không phải là rất tốt
Eugene Osovetsky

Câu trả lời:


224

Giải pháp khác:

  1. Chọn các mục bạn muốn trong lần xem phụ của mình, sau đó
  2. (trong thanh công cụ) Trình chỉnh sửa> Nhúng vào> kiểu xem để nhúng vào.

12
Cảm ơn. Đây phải là câu trả lời được chấp nhận. Chọn tất cả các chế độ xem bạn muốn chuyển sang chế độ xem siêu mới -> nhúng vào chế độ xem -> di chuyển chế độ xem vùng chứa mới vào chế độ xem siêu cấp mong muốn -> trình chỉnh sửa - không bị chặn. Thì đấy! Tất cả các chế độ xem đều ở chế độ xem siêu mới với các khung hình chính xác.
Accatyyc

18
Quá xấu bất kỳ hạn chế bố trí tự động không được sao chép trên, cách duy nhất tôi đã nhìn thấy là để chỉnh sửa bằng tay của xib xml: indiestack.com/2013/12/transplanting-constraints
James

1
Có một điều vẫn còn lạ là khi tôi nhúng các chế độ xem phụ của mình vào chế độ xem siêu lớn mới của chúng, chế độ xem siêu quan có tọa độ lạ. Nó bắt đầu bằng -20 x và -20 y, và sau đó nếu tôi đặt nó thành 0,0 thì mọi thứ sẽ bị lệch tâm.
user3344977

1
@James Tôi đã từng làm điều đó. Nhưng tôi thấy rằng nếu bạn Command-X_Command-V xem trong Xcode 6, các ràng buộc giữa các chế độ xem đã dán được tôn trọng. Cải tiến nhỏ.
Steven Kramer

4
@StevenKramer Tôi đã thử với Command-X và Command-V, không hiệu quả với tôi. Bạn có nhiều bước hơn để làm điều này? Tôi quan tâm
arh

28

Tôi tìm thấy một cái gì đó có thể giúp các bạn!

Nhiệm vụ là tập hợp lại các "chế độ xem con" thành "chế độ xem mẹ" để chúng trở thành các chế độ con của chế độ xem mẹ theo thứ bậc và giữ lại các vị trí thực trên màn hình như trước khi hành động.

Đầu tiên, điều chỉnh chế độ xem gốc để bao phủ thực tế khu vực chế độ xem con. Thứ hai, đảm bảo rằng tất cả trẻ em đều nằm dưới danh sách xem.

Bây giờ chọn tất cả các con bằng chuột và di chuyển chúng, ví dụ: một pixel lên và một pixel xuống (chỉ để nói IB có một số thay đổi). Sau khi thả con cái và chúng sẽ trở thành con của cha mẹ một cách kỳ diệu và giữ nguyên vị trí của chúng.

Nó hoạt động với tôi trên OSX 10.8.2 và Xcode 4.6.

Chúc may mắn!


Tuyệt vời ... Điều này thậm chí không phá vỡ các cửa hàng và khung. Nhúng vào khung xem ngắt. Phương pháp cắt dán phá vỡ các cửa hàng và khung.
jeet.chanchawat

22

Tôi đã tiết kiệm được rất nhiều thời gian để định vị lại các thứ và đã làm được điều này:

  1. Thêm chế độ xem chính trong Trình tạo giao diện ở cùng cấp với chế độ xem phụ sẽ có.
  2. Mở bảng phân cảnh trong trình soạn thảo văn bản và sao chép các lượt xem phụ sẽ có bên trong các thẻ lượt xem phụ của chế độ xem chính. XCode sẽ cập nhật sau khi bạn lưu nó.

Tuy nhiên, không phải là rất thanh lịch, không thể hiểu tại sao XCode không hỗ trợ nó với Shift hoặc một cái gì đó.


3
Đây là câu trả lời duy nhất luôn hoạt động đối với tôi trong Xcode 5 mà không cần phiền phức. "Editor-> Embed In" có vẻ là câu trả lời chính xác nhưng không phải lúc nào nó cũng liệt kê chế độ xem tôi muốn chuyển các chế độ xem phụ sang.
Denton

10
  1. Chọn tất cả các điều khiển bạn muốn chuyển từ UIView này sang UiView khác (không nên là con) hoặc ScrollView

  2. Cắt bản sao

  3. Bây giờ sau khi kéo UIView / ScrollView mới vào UIView hiện có của bạn, Đừng nhấp một lần để chọn nó, thay vào đó nhấp ĐÔI vào UIView / ScrollView mới và dán tất cả các điều khiển.

  4. Sự khác biệt về khoảng cách sẽ vẫn như nhau giữa tất cả các điều khiển, nhưng bạn có thể phải đặt lại các điều khiển một lần nữa. Vì vậy, đừng nhấp vào bất kỳ đâu cho đến khi bạn đã định vị lại các vị trí đó, chỉ cần đặt lại vị trí của tất cả các điều khiển bằng các mũi tên điều hướng vì chúng đã được chọn tất cả hoặc bạn có thể chọn lại chúng.

LƯU Ý: Tôi đang sử dụng XCode 4.2


Này nếu điều này hoạt động thì đó là câu trả lời tốt nhất ở đây (để kéo nhiều điều khiển vào chế độ xem hiện có)
Colin

@me trên Xcode 4.6.2, không thể mở cửa sổ xem phụ bằng cách nhấp đúp vào nó, vì vậy phương pháp này không hoạt động.
Colin

Hoạt động ổn trong Xcode 5. Vị trí tương đối vẫn giữ nguyên, chỉ cần định vị dọc bị tắt, nhưng điều đó đủ dễ dàng để định vị lại toàn bộ nhóm cùng một lúc.
qix

điều xấu là bạn bị mất chế autolayout bạn: '( indiestack.com/2013/12/transplanting-constraints đây bạn có thể tìm ra cách để hạn chế 'cấy'
Joan Cardona

4

Tôi đã làm điều gì đó tương tự như giải pháp của Stepan, mà không cần sử dụng bảng phân cảnh. Trong IB khi khung nhìn của ViewController đang mở:

  1. Tạo một dạng xem khác ngoài dạng xem chính của VC
  2. Di chuyển tất cả các chế độ xem phụ sang chế độ xem thứ hai bằng cách kéo chúng từ chế độ xem này sang chế độ xem khác (kéo từ danh sách ở bên trái sẽ đặt lại vị trí của chúng) Nếu bạn không thể chọn chúng từ IB bằng cách sử dụng chuột, hãy chọn tất cả từ danh sách ở bên trái sau đó chọn một lượt xem phụ cuối cùng từ bảng IB bằng nút "cmd".
  3. Đưa họ trở lại chế độ xem cuối cùng trên chế độ xem chính ban đầu.
  4. Xóa chế độ xem đã thêm, tất cả đã được thiết lập.

2

Đây là giải pháp tốt nhất để sao chép các lượt xem phụ sang một chế độ xem khác và giữ lại các vị trí:

  1. Chọn các mục bạn muốn trong lần xem phụ của mình, sau đó
  2. Trình chỉnh sửa -> Nhúng vào -> Xem
  3. Sao chép Chế độ xem này (Cmd + C)
  4. Hoàn tác (Cmd + Z) (Vì bạn chỉ muốn các lượt xem phụ)
  5. Chuyển đến chế độ xem bạn muốn các lượt xem phụ và dán nó vào (Cmd + V)
  6. Chọn Chế độ xem nhúng mà bạn đã sao chép-dán và Trình chỉnh sửa -> Chưa gắn

Bước 6 sẽ xóa chế độ xem nhúng và bạn sẽ chỉ sao chép các chế độ xem phụ.


2

Trình tạo giao diện Xcode gây rối khi một Chế độ xem chính được kéo và thả vào một Chế độ xem khác (UIView, ScrollView, StackView)

H:
Nhúng một Chế độ xem (chứa nhiều chế độ xem phụ khác bên trong nó) vào một ScrollView hoặc trong một chế độ xem cấp cao nhất khác không phải là điều tôi đã thấy cho đến nay. Điều xảy ra ngay sau đó là tất cả các lượt xem phụ dường như bị đặt sai vị trí do không thể tìm thấy khung hình ban đầu của chúng.

A:
Thực hiện theo các bước sau và bạn sẽ có thể giải quyết nó dễ dàng hơn có thể:

  1. Chọn các mục bạn muốn trong lần xem phụ của mình, sau đó
  2. Đi tới trình đơn, Trình chỉnh sửa -> Nhúng vào -> Xem
  3. Sao chép Chế độ xem mới này (Cmd + C) với các chế độ xem phụ (đối với tôi hiện tại tất cả các ràng buộc đã được giữ nguyên cho đến thời điểm này)
  4. Đi đến chế độ xem (có thể là ScrollView hoặc có thể là StackView) bạn muốn các chế độ xem phụ ở trong và dán (Cmd + V) chế độ xem đã sao chép
  5. Chọn Chế độ xem Nhúng đã dán (mà bạn mới tạo trước đó) và Đi tới thanh menu của Xcode, Trình chỉnh sửa -> Chưa gắn

Không, vẫn chưa kết thúc! Đôi khi, bạn có thể gặp phải một vài vấn đề liên quan đến Ràng buộc giao diện người dùng, bạn sẽ phải giải quyết chúng cho phù hợp.


1

Tôi đã phát hiện ra một cách tiếp cận khác. Về cơ bản nó là: Di chuyển = Cắt + Dán

Bằng cách này bạn làm:

  • nhận tất cả các chế độ xem phụ của bạn để trở thành con của chế độ xem gốc mới (P ')
  • giữ (gần như) tất cả các ràng buộc của bạn trong Bảng phân cảnh dựa trên bố cục tự động
  • giữ các vị trí (khung) tương đối của lượt xem phụ của bạn với nhau

Bằng cách này, bạn không:

  • chỉnh sửa tệp Storyboard trong trình soạn thảo văn bản

Điều cơ bản là mỗi chế độ xem ngoại trừ một (gốc) trong Storyboard đều có chế độ xem chính của nó . Tiếp theo, khi bạn sao chép / di chuyển nhiều chế độ xem phụ, bạn sẽ mất các khung và ràng buộc .

Câu trả lời là khá đơn giản. Bạn tạo một bản sao của các chế độ xem phụ (SV) của mình bằng cách sao chép chế độ xem chính của chúng (P) vào chế độ xem mẹ mới (P '). Bằng cách này, bạn có thể chỉ cần tạo lại các ràng buộc từ chế độ xem mới gốc đó (P ') sang chế độ xem mẹ mới của nó nhưng không phải cho mọi chế độ xem phụ bạn muốn di chuyển.

Sau khi bạn đã tạo bản sao của chế độ xem chính (P) thành một bản sao mới (P '), từ chế độ xem mới đó (P') bạn:

  • loại bỏ tất cả các con ngoại trừ những con mà bạn muốn di chuyển
  • tạo lại các ràng buộc cha (P ') mới
  • tạo lại các cửa hàng Trình tạo giao diện có thể có cho (SVs ')

Và từ chế độ xem gốc (P), bạn:

  • loại bỏ tất cả các trẻ em mà bạn muốn di chuyển

Trước:

View1

View2

P

SVs-bạn-muốn-di chuyển

SVs-bạn-không-muốn-di chuyển

View3

Sau:

View1

View2

P

SVs-bạn-không-muốn-di chuyển

View3

P '

SVs'-bạn-muốn-di-chuyển

Tôi nên nhấn mạnh rằng điều này không tổng quát hóa tốt nếu bạn có ví dụ: UIScrollView làm chế độ xem chính. Sau đó, một bản sao của nó sẽ lại là một UIScrollView những gì có thể không được mong muốn.

Một điều khác là khi bạn xóa một số chế độ xem phụ (SV) trong chế độ xem gốc ban đầu (P), bạn có thể cần tạo lại một số ràng buộc nếu các chế độ xem phụ khác (không thể di chuyển) tham chiếu đến chúng. Nhưng dù sao bạn cũng nên làm điều đó.


0

Điều gì đã giúp tôi giải quyết vấn đề này là-

  1. Tạo chế độ xem gốc mong muốn (chế độ xem cuộn hoặc chế độ xem uiview) trong xib ở cấp cơ sở và thay đổi kích thước cho phù hợp
  2. Sao chép tất cả các chế độ xem mà bạn muốn trở thành các chế độ xem phụ của chế độ xem gốc này và dán chúng vào chế độ xem mới mà bạn đã tạo ở bước 1
  3. Tại thời điểm này, bạn sẽ nhân đôi các quan điểm này. Các chế độ xem mới được thêm vào sẽ bị lệch nhưng vẫn theo cùng một thứ tự và ở cùng một khoảng cách với nhau, hãy căn chỉnh chúng theo xib để khớp với giới hạn của chúng với các bản sao cũ của cùng một chế độ xem (Điều này giả định rằng chế độ xem chính mới có cùng giới hạn với cái cũ)
  4. Các chế độ xem mới được thêm vào sẽ mất đi một số ràng buộc, hãy tham khảo các chế độ xem cũ để khắc phục những
  5. Xóa các chế độ xem cũ khỏi xib
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.