Xcode 9 - Ràng buộc chiều rộng cố định có thể gây ra cắt xén và cảnh báo nội địa hóa khác


147

Tôi đã tải xuống Xcode mới và trong Trình tạo giao diện Tôi đang gặp rất nhiều vấn đề với các cảnh báo có nội dung như sau:

Cố định chiều rộng có thể gây ra cắt

Nó trông như thế này:

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

Tôi có bản địa hóa cho một số ngôn ngữ và tôi hiểu cảnh báo rằng trong ngôn ngữ khác, kích thước của nhãn có thể thay đổi, nhưng ứng dụng của tôi không gặp phải vấn đề này. Tôi đã chạy và thử nghiệm nó trong Xcode 8 ngày hôm qua, nó vẫn ổn. Tôi không muốn dành hàng giờ đồng hồ để thêm các ràng buộc mới vô nghĩa.

Bất kỳ giải pháp đề xuất?


Tôi đề nghị bạn nên tìm cách tự động hóa
Dark Innocence

3
Tương tự ở đây. Có các nút được đảm bảo có chiều rộng 50pt trong tất cả các ngôn ngữ. Tại sao lại hờn dỗi thẻ báo cáo tự động xóa sạch của tôi với điều này?
John Scalo

9
Đây chắc chắn là một vấn đề lớn và thật đáng ngạc nhiên khi không có nhiều điều để nói về nó: O
Fattie

2
Tôi nhận được lỗi này thậm chí chỉ có bản địa hóa tiếng Anh.
Sắc thái

6
Đối với những người khác, nếu bạn KHÔNG có bất kỳ nội địa hóa nào và chỉ muốn các cảnh báo này biến mất thì hãy chuyển bảng phân cảnh của bạn ra khỏi thư mục Base.iproj như được chỉ ra ở đây: stackoverflow.com/a/45040394/1807644
William T.

Câu trả lời:


179

Tôi đã nhận được những cảnh báo tương tự ngay cả khi không có nhiều ngôn ngữ trong ứng dụng của mình , điều này khiến tôi tìm hiểu điều gì đang thực sự xảy ra. . .

Có một vài điều khác nhau đang diễn ra ở đây. Tôi đã có thể tắt các cảnh báo về chiều rộng cố định trong ứng dụng của riêng mình bằng cách thay đổi độ rộng của các khoảng cách đối tượng từ chiều rộng cố định thành lớn hơn hoặc bằng hoặc nhỏ hơn hoặc bằng .

Điều này có thể được thực hiện bằng cách chọn đối tượng trong trình tạo giao diện, đi đến trình kiểm tra kích thước và thay đổi nó ở đó:

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


Hoặc, chọn ràng buộc từ phác thảo tài liệu, đi đến trình kiểm tra kích thước và thay đổi nó ở đó:

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



Theo như cảnh báo ở trên cùng của ảnh chụp màn hình của bạn:

Đã sửa các ràng buộc hàng đầu và dấu với một ràng buộc trung tâm có thể gây ra cắt

Đây là một ảnh chụp màn hình từ ứng dụng của riêng tôi, trong đó tôi đã nhận được cảnh báo chính xác như sau:

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

Tôi đã có nhãn với dấu @ được đặt thành hàng đầu và theo dõi các nút nhưng cũng để căn chỉnh trung tâm với nhãn xếp hạng . Khi tôi loại bỏ ràng buộc căn chỉnh trung tâm , cảnh báo biến mất, nhưng tôi bị bỏ lại với một bộ đối tượng được đặt không đúng cách.

Sau đó, tôi đã từ chức để nắm lấy Stack View . Thật khó chịu khi sử dụng, khi bạn nhận được tất cả các ràng buộc và cài đặt đúng, nó sẽ hiển thị rất đẹp và không có cảnh báo.


Biên tập

Như Repose viết trong các bình luận, đôi khi chỉ cần thêm> = 0 sẽ là những gì bạn cần, vì bạn đang đảm bảo hai yếu tố không trùng nhau.


2
> = 0 ngăn ngừa các vấn đề chồng chéo và cố định chồng chéo mà tôi gặp phải trước đó, chuyển đổi Dẫn đầu / Trailing sang Phải / Trái đã sửa lỗi cắt cho tôi. Kết quả có thể thay đổi. Vui lòng tham khảo ý kiến ​​bác sĩ của bạn trước khi bắt đầu bất kỳ phát triển phần mềm.
Nghỉ ngơi

@Repose Chính xác. Hãy suy nghĩ về những gì có thể sai và thêm một ràng buộc để đảm bảo rằng nó không.
Sắc thái

Từ chức để sử dụng Stack View trong iOS có thể là ổn, nhưng đối với OS X (xin lỗi MacOS) thì không phải lúc nào cũng là một lựa chọn tốt. Apple nên biết điều đó. Khái niệm UI và UX thường có các giả định khác nhau.
Joannes

2
Tôi đồng ý với việc chấp nhận UIStackView. Nó chắc chắn là một nỗi đau và tôi đã cố gắng làm điều đó với một vài hạn chế, tôi đã thêm một UIStackView khác và nó đã được trình bày hoàn hảo.
templeman15

1
Có lựa chọn nào khác không - Nếu tôi muốn điều khiển của mình có chiều rộng cố định thì sao?
Kampai

60

Bạn có thể thử Tắt "Tôn trọng hướng ngôn ngữ" trên cơ sở ràng buộc để tắt tiếng cảnh báo và xem liệu nó có giúp ích không. Chọn ràng buộc của bạn và mở Thuộc tính / Thanh tra kích thước. Xin vui lòng xem hình ảnh đính kèm.

Nếu bạn không có kế hoạch bản địa hóa ứng dụng của mình sang các ngôn ngữ khác, thì giải pháp này sẽ không có bất kỳ dự phòng nào. Đối với các ứng dụng được bản địa hóa, bạn phải có ý thức hơn về kích thước nhãn và phông chữ của mình.

ps Giải pháp này hoạt động cho iOS. Đối với macOS, hãy thử> = hoặc <= để tắt cảnh báo.

pps Nhãn trong hình bên dưới dễ dàng hơn nhiều khi sử dụng thuộc tính AutoLayout và AttributionString trên một UILabel hoặc UITextView bằng NSMutableAttributionString. Hình ảnh chỉ dành cho mục đích trình diễn.

Định hướng ngôn ngữ


1
Đã sửa lỗi "Đã sửa lỗi ràng buộc dẫn và theo dõi với ràng buộc trung tâm có thể gây ra sự cố". Cảm ơn!
chập chững

4
Nếu bạn đã thử điều này và nó dường như không có tác dụng gì, hãy thử thoát Xcode và khởi động lại nó. Thủ thuật đó đã làm việc cho tôi.
T'Pol

2
Nó sẽ không cho phép tôi bỏ chọn cái này.
Xe tay ga

1
Hoàn hảo! điều này làm việc cho tôi và không cần phải thay đổi các ràng buộc của tôi, cảm ơn!
rgkobashi

1
> = các ràng buộc có ảnh hưởng xấu đến tôi vì các chương trình ưu tiên phức tạp khác nhau. Tôi đã chuẩn bị chèn Nhãn của mình vào Chế độ xem, nhưng sau đó tìm thấy giải pháp của bạn đã thực hiện được mẹo đó! Cảm ơn :)
KerCodex

33

Đối với các nhãn và nút được bản địa hóa, cảnh báo này có ý nghĩa và bạn nên cung cấp các ràng buộc cần thiết để nhãn của bạn không trùng nhau. Nếu bây giờ chúng không trùng lặp, chúng có thể trong tương lai, vì vậy sẽ không gây hại gì khi cung cấp các ràng buộc.

Xcode giúp bạn tự động thêm các ràng buộc này:

Trong phác thảo tài liệu của bảng phân cảnh của bạn, nhấp vào mũi tên màu vàng và chọn "cố định hàng đầu" hoặc "theo dõi cố định", tùy thuộc vào vị trí của văn bản trên màn hình của bạn (trái hoặc phải). Điều này sẽ khắc phục nó cho hầu hết các vấn đề.

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

Nếu bạn gặp vấn đề này với Nút không có bất kỳ văn bản nào (chỉ hình ảnh), hãy thử xóa "tiêu đề mặc định" vẫn có thể được đặt cho nút:

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


4
Trong trường hợp của tôi, loại bỏ tiêu đề mặc định đã loại bỏ cảnh báo. Cảm ơn!
Reinhard Männer

Hãy lưu ý rằng khi bạn thêm một UIButtonđến Storyboard, các default buttondanh hiệu sẽ button.
Miguel Tepale

29

Với Labels, bạn có thể đặt Lines0Autoshrinkcác thuộc tính là Minimum Font Sizeđể xóa Fixed Width Constraints May Cause Clippingcác cảnh báo, như thế này:

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


3
Có, bạn chỉ cần đặt các dòng thành 0.
Reefwing

2
Các dòng cài đặt thành 0 khiến nhãn mở rộng thành nhiều dòng nếu cần, có thể không phải là thứ bạn muốn.
nickdnk

@nickdnk: tôi biết rằng, nếu bạn cố định hạn chế chiều cao cho nhãn, nó sẽ không mở rộng.
Lionking

20

Một giải pháp nhanh chóng khác!

Đối với một UIButton bằng cách thay đổi tiêu đề từ văn bản đơn giản sang văn bản được phân bổ cũng đã giải quyết vấn đề của tôi: -

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


Làm việc như người ở!
thủ công

7

Tôi biết câu hỏi này đã được trả lời nhưng những gì tôi đã làm để khắc phục lỗi này trong trường hợp của mình là thêm thuộc tính "Tỷ lệ khung hình" và sau đó loại bỏ giới hạn chiều rộng hoặc chiều cao, điều này hoạt động khá tốt và ít nỗ lực hơn và tôi đã cố gắng giữ cùng một đầu ra và điều chỉnh quan điểm của tôi cho các thiết bị khác nhau.


4

Swift 4, Xcode 9.1:

Về vấn đề này, tôi nghĩ rằng đối tượng của bạn không biết vị trí trung tâm chính xác trong bối cảnh của nó là gì , và sử dụng loại bỏ, lớn hơn hoặc các cài đặt hàng đầu / đánh cắp khác hầu hết không hoạt động chính xác. Trước tiên, bạn phải kiểm tra các ràng buộc chính xác của giám sát của bạn.

Nếu giám sát của bạn được giải quyết chính xác, bạn có thể cố gắng "giải thích" cho đối tượng của mình vị trí chính xác trong chế độ xem bằng cách đặt ràng buộc "theo chiều ngang trong Container" :

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


2

Nếu bạn cần ràng buộc độ rộng cố định cho nút, chỉ cần đặt mức độ ưu tiên ràng buộc độ rộng thành 700.


1

Tôi có cùng một vấn đề, nhưng khi tôi thay đổi >=nó sẽ tự động đặt hằng số thành 0, nếu tôi chọn 60, ví dụ, cảnh báo sẽ xuất hiện lại. Vì vậy, tôi đã ở trong một vòng lặp với vấn đề.

Tôi có thể sửa chữa nhúng của tôi Labeltrong mộtView

Editor > Embed In > View

Trong Labeltôi set Top, Bottom, LeadingTrailingvớiconstant = 0

những hạn chế

Trong Viewtôi thiết lập những constraintsgì tôi đã mong đợi trước đây.


1

Tôi gặp vấn đề tương tự khi chuyển sang Xcode 9 và thấy một cách tiếp cận hữu ích cho một số loại bố cục nhất định. Trong trường hợp của tôi, tôi muốn một tiêu đề bảng trong đó hai cột (UILabels) có chiều rộng cố định và một cột khác có chiều rộng thay đổi. Bất kể tôi đã chỉ định độ rộng cột như thế nào (bao gồm sử dụng các ràng buộc lớn hơn hoặc bằng thay vì bằng nhau, v.v.), tôi tiếp tục nhận được cảnh báo về việc cắt có thể. Trong trường hợp của tôi, tôi muốn cột chiều rộng thay đổi (UILabel) để cắt nếu cần thiết. Tôi có thể bỏ qua cảnh báo, nhưng không thích làm điều đó.

Cách tiếp cận hiệu quả ở đây là tạo ra một UIView với các ràng buộc kích thước phù hợp và nhúng UILabel làm một khung nhìn phụ trong UIView. Sau đó cắt ngắn xảy ra nếu cần thiết và tôi không nhận được cảnh báo. Điều này hoạt động cho dù UIView / UILabel nhúng có trong StackView hay không.

Đây thực chất là cách tiếp cận tương tự như của Haroldo Gondim nhưng ở đây bạn có thể thấy nó cũng hoạt động với hoặc không có StackView.

Hình ảnh sau đây cho thấy cách tiếp cận, có và không có StackView. "SpacerName" là UIView có chiều rộng thay đổi có chứa nhãn và "SpacerPD" là một chiều rộng cố định là 80. [Màu sắc không đáng kể; chỉ ở đó để hiển thị các quan điểm ở đâu.]

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


0

Như bạn có thể thấy trong hình bên dưới, tôi đã gặp lỗi "Đã sửa lỗi ràng buộc độ rộng có thể gây ra cắt" vì mặc dù tôi đã đặt hộp văn bản của mình ở giữa và nhãn của tôi có ràng buộc lề trái, tôi đã không xác định ràng buộc đối với hộp văn bản liên quan đến nhãn, vì vậy XCode đã cảnh báo tôi rằng hộp văn bản có thể cắt (được hiển thị ở trên) nhãn.

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

Sau khi thêm ràng buộc bên trái vào hộp văn bản để luôn giữ khoảng cách ngoài nhãn, lỗi được XCode xem là đã được giải quyết và nó không còn làm phiền tôi với cảnh báo ràng buộc nữa.


0

Tôi đã gặp một vấn đề tương tự khi thử có nút có cùng miếng đệm từ các cạnh của siêu view.

Trường hợp lỗi

Tôi đã kết thúc bằng cách sử dụng các horizontal centerràng buộc và equal widthsràng buộc với super view.

Giải pháp của tôi


-1

Để khắc phục lỗi : Đã sửa các ràng buộc về chiều rộng có thể gây ra cắt xén và địa phương hóa khác Bạn cần chọn chế độ xem / đối tượng, đi đến "Hiển thị thanh tra kích thước", tìm ràng buộc độ rộng và đặt Hằng số thành lớn hơn hoặc bằng:

Thanh tra kích thước

Để khắc phục lỗi : Thiếu ràng buộc hàng đầu / Trailing có thể gây ra sự chồng chéo với các chế độ xem khác

Điều này có nghĩa là Xcode của chế độ xem / đối tượng đang phàn nàn, thiếu một ràng buộc hàng đầu hoặc lưu trữ đối với chế độ xem lân cận.

Trong khi giữ điều khiển, kéo đến gần bằng cách xem / đối tượng

Contrl + Nhấn Click

Thêm một ràng buộc hàng đầu hoặc Trailing

Dẫn đầu / Trailing Constraint


Nếu bạn nhấp vào tam giác cảnh báo Xcode sẽ tự động tạo chúng cho bạn chỉ bằng một cú nhấp chuột.
lensovet
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.