Các vấn đề về bố cục sau khi cập nhật lên Xcode 8


102

Đây là ảnh trước và sau của một trong các màn hình của tôi sau khi tôi nâng cấp lên Xcode 8.
Tất cả những gì tôi làm là mở main.storyboard của mình và từ đó, tôi xây dựng và chạy ứng dụng của mình trên điện thoại.
Trong điều khiển phiên bản của tôi, tôi có thể thấy Xcode đang thực hiện rất nhiều thay đổi đối với main.storyboard của tôi chỉ khi tôi mở nó.
Bất cứ khi nào tôi xóa những thay đổi đó, tôi có thể xem những gì tôi sử dụng để xem trong Xcode 7.3.1.
Tuy nhiên, ngay sau khi tôi mở lại trình tạo giao diện với bảng phân cảnh của mình, tôi thấy những thay đổi đó trở lại đúng vị trí.

Tôi có thể làm gì ở đây?

Trước Xcode 8

nhập mô tả hình ảnh ở đây

Sau khi cập nhật lên Xcode 8

nhập mô tả hình ảnh ở đây


Hãy thử mở lại XCode 8 với một nguồn mới (lưu trữ bất kỳ thay đổi nào mà nó đã thực hiện trước đó). Bây giờ, khi bạn mở bảng phân cảnh, hãy đánh dấu tất cả các mục giao diện người dùng của bạn và nhấp vào "Cập nhật khung". Điều này có thể khắc phục sự cố của bạn.
d1str0

6
Bạn có thể gửi lỗi tại bugreport.apple.com và đính kèm bảng phân cảnh mà điều này đang xảy ra không? Chúng tôi xin phân tích sâu hơn về vấn đề này.
Quinn Taylor

1
Tôi có chung vấn đề đó. Sau khi mở bảng phân cảnh của tôi trong Xcode8 và chấp nhận Hộp thoại "Chọn chế độ xem thiết bị ban đầu", mọi thứ đều hoạt động lạ. Khi tôi cập nhật tất cả các khung, IB có vẻ tốt, nhưng sau khi xây dựng, ứng dụng hoàn toàn bị hỏng. Đã thử nghiệm nó với 4 ứng dụng.
Cherrypig

@QuinnTaylor Tôi đang gặp sự cố tương tự, sau khi Xcode 8 chuyển đổi bảng phân cảnh của tôi, UIImageViews trong UITableViews không hiển thị bất kỳ nội dung nào mặc dù đường viền của chúng hiển thị trong Debug View Hierarchy. Các đối tượng khác của cùng một lớp trong UICollectionViews không bị ảnh hưởng.
Manuel

XIB hoặc Storyboard đặt mặc định là phiên bản cũ hơn 7.x và Save and Close. Giải pháp tạm thời, nhưng hiệu quả. Không mở lại khi bạn đã thực hiện Lưu và Đóng. Nếu không, một lần nữa cần làm theo các bước tương tự từ đầu.
Bhavesh Kumbhani

Câu trả lời:


111

Tôi gặp sự cố tương tự với hình ảnh tableview không xuất hiện sau khi tôi chuyển đổi tệp storyboard để tương thích với Xcode8. Đây có vẻ như là một lỗi với Xcode8, vì vậy cho đến khi bản sửa lỗi được phát hành, đây là công việc xung quanh:

  1. Mở bảng phân cảnh của bạn trong Xcode 8 và chọn chế độ xem thiết bị ban đầu. Thực hiện các thay đổi như bạn thường làm.
  2. Khi bạn đã hoàn tất các thay đổi của mình, hãy chọn bảng phân cảnh -> Trình kiểm tra tệp -> Mở trong -> Chọn 'Xcode 7.x'.

nhập mô tả hình ảnh ở đây

  1. Chọn 'Lưu và Đóng' khi được nhắc
  2. Các thay đổi trong bảng phân cảnh của bạn sẽ được lưu và bảng phân cảnh của bạn sẽ hoạt động như trước Xcode8.

Khi bạn cần thực hiện các thay đổi khác đối với tệp bảng phân cảnh, hãy thực hiện lại các bước sau.


Wow +1 cho điều này chắc chắn. Tôi đã vật lộn với điều này trong iOS 10 trong TodayExtension của mình. Cho đến khi tôi thu hẹp mọi thứ, phân tích sự khác biệt của git, tôi mới thấy các chỉnh sửa xml đáng ngờ của bảng phân cảnh được thêm vào bởi Xcode 8. Sau khi lưu tài liệu bảng phân cảnh cho Xcode 7 (sau khi thực hiện các chỉnh sửa của tôi), giờ tôi có thể xây dựng và vận chuyển bằng cách sử dụng Xcode 8 cho iOS 10. Cảm ơn.
John Erck

Nó chắc chắn là một lỗi. Lưu dưới dạng Mở trong Xcode 7.x đối với tôi như một giải pháp tạm thời.
Steve A

Tôi đã dành 3 ngày qua để sửa tất cả bố cục bị hỏng từ nơi này sang nơi khác trong Xcode8 cho đến khi tôi tìm thấy bài đăng này. Tôi có lẽ nên tin những người như các bạn hơn là Apple. Không thể tin rằng điều này đã lãng phí rất nhiều thời gian của tôi. Cảm ơn David rất nhiều vì điều này!
Xu Yin

@XuYin Chúng ta có nên làm điều này cho mọi bảng phân cảnh không? Ý tôi là nếu tôi có một bảng phân cảnh khác trong dự án của mình? Còn các tệp Xib thì sao? tôi có nên làm điều đó cho cả những người nữa không?
Honey

@Honey Tôi đã không làm điều đó trên bảng phân cảnh, nhưng tôi đã làm trên mọi tệp xib mà tôi gặp vấn đề. nhưng tôi nghĩ bạn cũng có thể muốn thử nó trên bảng phân cảnh nếu bạn thấy vấn đề về bố cục lạ. vì quá trình sửa chữa sẽ chỉ mất khoảng 5 giây. và sau khi xây dựng lại ứng dụng, bạn sẽ có thể thấy bản sửa lỗi rất nhanh chóng.
Xu Yin

14

XIB hoặc Storyboard đặt mặc định là phiên bản cũ hơn 7.x và Save and Close. Giải pháp tạm thời, nhưng hiệu quả. Không mở lại khi bạn đã thực hiện Lưu và Đóng. Nếu không, một lần nữa cần làm theo các bước tương tự từ đầu.nhập mô tả hình ảnh ở đây


6
Điều này không hữu ích vì tôi cần phải làm việc trên tệp. Tất cả điều này là lưu tệp để tương thích ngược. Nó không cho phép xib được chỉnh sửa trong Xcode 8.
jowie

tôi đang làm điều này nhưng một lần nữa khi tôi đang chọn tập tin xib trong danh sách thả xuống nó được hiển thị xcode 8.0 chỉ ...
Jayant Rawat

8

Ơ cùng một vấn đề. Tôi đã khắc phục được một phần theo cách sau ( đối với Xcode Phiên bản 8.1 (8B62) )

Trong phác thảo tài liệu của Storyboard, tôi nhấp vào mỗi cảnh có mũi tên màu vàng chỉ ra một số vấn đề về bố cục (Số 1 trên ảnh chụp màn hình)

Sau đó, đối với mỗi cảnh có vấn đề, tôi phải nhấp vào biểu tượng nhỏ "Cập nhật khung" (Số 2 trên ảnh chụp màn hình) để khắc phục tất cả các vấn đề về bố cục cho mỗi cảnh.

nhập mô tả hình ảnh ở đây

Tuy nhiên, một cảnh trong trường hợp của tôi vẫn ở trạng thái khóc sau khi chuyển từ Xcode7 sang Xcode8. Tôi đã phải sửa nó theo cách thủ công bằng cách điều chỉnh các ràng buộc hoặc thêm các ràng buộc bị thiếu.

Phù, không có bất ngờ tốt đẹp của XCode8 và Storyboards. Nếu bạn đã sử dụng trình chỉnh sửa AppCode, bạn sẽ không gặp vấn đề như vậy, vì nó không hỗ trợ Bảng phân cảnh; P

Chúc may mắn!



6

Vui lòng làm theo các chủ đề để biết bất kỳ giải pháp khả thi nào: (Tôi tin rằng nó xảy ra với nhiều nhà phát triển).
Xcode 8 GM hạt giống Vấn đề về bảng phân cảnh
Xcode 8 - Các bảng phân cảnh trước đây bị biến dạng

(tôi sử dụng anyH anyW width 600) Khi Xcode cập nhật lên Xcode 8, nó đã thay đổi tất cả kích thước ViewControllers của tôi. Kết quả là tất cả bố cục đã bị bóp méo.
Hiện tại tôi chỉ thấy có 3 giải pháp cho vấn đề (tôi sẽ không tin tưởng vào việc chờ đợi bản sửa lỗi sớm).

1. Đi đến từng Viewcontroller và sửa nó bằng cách Update Frames.

2. Đi tới ViewController chính Size Inspector -> Freeform -> 600vì hầu hết các bộ điều khiển được suy luận rằng nó sẽ thay đổi kích thước cho tất cả chúng. (Hãy cẩn thận về tác động của các Tính năng mới mà Apple muốn giới thiệu).

3. Bỏ những thay đổi trong git cho bảng phân cảnh (Tôi không đề xuất vì Apple cũng đã chèn một số bản cập nhật có thể quan trọng đối với Xcode).

Liên kết bổ sung cho các tính năng Tự động thanh toán mới trong Xcode 8 (WWDC16): Làm cho ứng dụng thích ứng, Phần 1


1
Lựa chọn 1 là hợp lý nhất và nó phù hợp với tôi. Như Mike.R lưu ý, hãy cẩn thận khi cố gắng 'lừa' XCode sửa chữa mọi thứ vì không thể tránh khỏi nhiều rắc rối hơn.
arcady bob

Tôi cũng đã sử dụng tùy chọn 1 (tôi nghĩ nó an toàn hơn). Nhưng nó tốn thời gian.
Mike.R

5

Trong trường hợp của tôi, các giải pháp hoạt động do Akhil Kateja đề xuất và tôi cũng cần đặt lại Chiều rộng và Chiều cao của chế độ xem chính:

1) Đặt Kích thước Chế độ xem thành Biểu mẫu Tự do

nhập mô tả hình ảnh ở đây

2) Đặt lại Chiều rộng và Chiều cao của chế độ xem về kích thước ban đầu:

nhập mô tả hình ảnh ở đây

Cuối cùng lưu lại và bạn đã hoàn tất.


4

Đối với tôi, giải pháp chỉ đơn giản là nhấp vào UIViewController gặp sự cố và sau đó Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

Nó đã sắp xếp lại các chế độ xem để phù hợp với các ràng buộc hiện có dựa trên chế độ xem mặc định mới được chọn (trong trường hợp của tôi là iPhone 7).

Cũng lưu ý: nếu bạn nhận được cảnh báo Chế độ xem sai vị trí của Thanh điều hướng như tôi đã làm, chỉ cần chọn UINavigationController / UIViewController và sau đó Attributes Inspector > Bar Visibility > Shows Navigation Bar- TẮT rồi BẬT lại.


3

Đặt Kích thước dạng xem thành Dạng tự do từ Inferred đã làm việc cho tôi. Nó có thể được tìm thấy dưới tiêu đề Chỉ số được mô phỏng trong Trình kiểm tra thuộc tính .


3

Tôi đã gặp vấn đề tương tự và tôi đã giải quyết nó bằng cách buộc cập nhật các ràng buộc chế độ xem của bộ điều khiển. Đặt mã sau vào hàm viewDidLoad () của bạn

self.view.layoutIfNeeded()

1
Chúc mừng Bill! mà 'layoutIfNeeded' đã làm việc cho tôi! (Sau khi thử mọi thứ khác trong nhiều giờ ..)
Ethan Halprin

3

Tôi đã chọn từng bộ điều khiển và nhấp vào "Cập nhật khung" và nó đã sửa bố cục.


3

Câu trả lời từ @ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) không hoạt động trong trường hợp của tôi, vì vậy nếu bạn ở trong trường hợp tương tự của tôi, hãy thử cách này:

Trong trường hợp bạn đã cập nhật tất cả các thiết bị của mình lên iOS 10+, phiên bản Xcode này sẽ không nhận dạng các thiết bị đó là thiết bị tương thích. Vì vậy, hãy thử với thủ thuật này:

  • Đi tới: /Application/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Sao chép các thư mục liên quan đến iOS 10 hoặc 10.1 vào: / Applications / Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  • Mở dự án bằng Xcode 7.3.1 (khởi động lại Xcode nếu bạn đã mở nó)
  • Chọn thiết bị iOS 10+ đã kết nối của bạn
  • Đẩy chạy

Lưu ý: Các tính năng mới như Swift sẽ không khả dụng khi sử dụng thủ thuật này, nhưng bạn có thể tải và xây dựng dự án của mình.


3

Hy vọng điều này sẽ giúp

Khi tôi cập nhật Xcode từ 7.3 lên Xcode 8 và chạy ứng dụng, một số chế độ xem được hiển thị hoàn hảo nhưng một số chế độ xem bị méo. Sau đó, tôi đã kiểm tra tệp nib và nó nhắc tôi chọn kích thước thiết bị cụ thể và sau đó hiển thị nib theo đó. kích thước thiết bị không phải là ngoại lệ Any-Any(Xcode 7.3) . Vì vậy, tất cả các tệp nibs không hiển thị theo cách chính xác.

Giải pháp làm việc hình thức tôi: - nhấn vào mũi tên màu vàng như hiển thị trong hình ảnh dưới đây

nhập mô tả hình ảnh ở đây

nó sẽ nhắc một cửa sổ bật lên hiển thị các tùy chọn như

nhập mô tả hình ảnh ở đây

Chọn Update Framesvới Apply to all views in containercheck. nó sẽ giải quyết khoảng 90% giao diện người dùng bị méo và phần còn lại của vấn đề ràng buộc bố cục tự động có thể được giải quyết theo cách thủ công.


Điều này cũng có thể làm hỏng Bố cục. IMHO, việc này phải được thực hiện một cách cẩn thận, xem từng lần một và kiểm tra xem mọi thứ có ổn không trước khi tiếp tục.
brainray

vâng, bạn cần dành một chút thời gian cho nó và giải pháp này có thể giúp bạn về lâu dài hơn khi bạn muốn cập nhật một số giao diện người dùng của mình.
Anurag Bhakuni

1

Tôi đã khắc phục sự cố bằng cách sử dụng Phiên bản Xcode 7.3.1, bạn có thể tải xuống tệp .dmg từ cổng nhà phát triển apple. Tôi đã sử dụng Tự động sửa lỗi trong mọi ứng dụng và nó hoạt động rất tốt đối với tôi. Tôi sẽ chỉ cập nhật lên Xcode 8 nếu họ có thể sửa lỗi này.

Tải xuống tại đây: https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg


Giải pháp này là vô ích nếu bạn muốn hỗ trợ iOS 10
jungledev

1

Để khắc phục sự cố tương tự, tôi đã định cấu hình xib là Freeform (không phải Inferred) VÀ lưu tệp xib dưới dạng tương thích Xcode 7.x. Cả hai bước đều được yêu cầu trong trường hợp của tôi. Tôi hy vọng rằng sẽ giúp!


1

Tôi nhận thấy một nút mới trong Xcode 8.2, (kiểm tra vòng tròn màu cam trong hình ảnh). Nó sẽ cung cấp cho bạn một số trợ giúp.

Các bước: 1. Mở bảng phân cảnh và chọn bất kỳ thiết bị nào bạn muốn 2. Chỉ cần chọn Bộ điều khiển Chế độ xem 3. Nhấp vào nút được đề cập (như trong Hình ảnh) 4. Nó sẽ cập nhật khung cho bộ điều khiển chế độ xem đó và bạn có thể tiếp tục với nó

Tôi không tìm thấy giải pháp nào tốt hơn điều này. Vui lòng trả lời nếu tìm thấy.

Ảnh chụp màn hình IB


Không có gì xảy ra.
Muju

0

cập nhật các ràng buộc và các lượt xem phụ bố cục trong viewdidload giải quyết vấn đề

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
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.