Mặt nạ tự động lập trình so với Trình tạo giao diện / xib / nib


216

Tôi đã ở trong một giả định (có thể sai) rằng cho phép chỉ báo lề phải trong xib tương đương với việc sử dụng UIViewAutoresizingFlexibleLeftMarginmã bên trong, v.v.

Vì vậy, tôi đã từng nghĩ theo ảnh chụp này: nhập mô tả hình ảnh ở đây

Sau hôm nay tôi phải kiểm tra chéo, và tình cờ thấy chủ đề này .

Và cũng là tài liệu táo, có tiêu đề với phần tiêu đề - "Xử lý thay đổi bố cục tự động bằng cách sử dụng quy tắc tự động hóa" trong liên kết này: https://developer.apple.com/l Library / content / documentation / WindowsViews /Conualual / ViewPG_iPhoneOS / InvestViewViews / CreationViews.html

Vì vậy, bây giờ tôi có một khái niệm mới về cách thiết lập mặt nạ tự động hóa lập trình sẽ tương đương với cài đặt xib:

Kịch bản 1 : Chỉ cài đặt (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)tương đương với:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

Trong XIB?

Kịch bản 2 : Cài đặt (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)mã tương đương với:

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin |

Trong XIB?

Là 2 kịch bản đổi mới của tôi là chính xác? Tôi có phải bây giờ trong sự hiểu biết của tôi?


3
Bạn đùa tôi? Nhưng dường như có sự nhầm lẫn của tôi quá. Vì vậy, nếu tôi muốn ôm đỉnh, tôi bật tự động xuống dưới. Tốt công việc táo. Đây là thiết lập ngu ngốc nhất mà tôi từng thấy.
dùng4951

1
Nếu bạn muốn ôm đầu, bạn phải chắc chắn rằng bạn sẽ đề cập đến UIViewAutoresizingFlexibleTopMargin trong mã mặt nạ bit. Giả định trước đây của tôi là sai và đó là lý do tại sao tôi đã đăng câu hỏi này để xóa nội dung.
Raj Pawan Gumdal

Giả định của bạn là chính xác. Bạn sai ở đâu
dùng4951

Vâng, hai kịch bản bạn trích dẫn là chính xác.

3
Tôi đã tạo ra một công cụ đơn giản cho việc này: erkanyildiz.me/lab/autoresizingmask bạn có thể sử dụng nó.
erkanyildiz

Câu trả lời:


35

Có, Trình tạo giao diện có nghĩa là "đảo ngược" theo nghĩa (hoặc UIView, tùy thuộc vào cách bạn nhìn vào nó). "Kịch bản" được trích dẫn của bạn là chính xác.


47

Vâng, bạn đã trích dẫn chính xác. Ngoài ra, tôi đồng ý rằng nó cảm thấy hơi ngược, vì vậy vì lý do đó tôi đánh giá cao bài viết của bạn.

Bạn có thể muốn sử dụng Macro tiền xử lý UIViewAutoresizingFlexibleMarginskhi làm cho lề của UIView linh hoạt theo mọi hướng. Tôi đặt cái này trong tệp tiêu đề được biên dịch trước để nó được đưa vào mọi nơi.

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

Việc sử dụng UIViewAutoresizingFlexibleMarginssẽ làm cho Phần tử giao diện người dùng được đặt ở giữa vì nó sẽ không ôm bất kỳ một phía nào. Để làm cho phần tử tăng / thu nhỏ với cha của nó, hãy đặt UIViewAutoresizingFlexibleWidthUIViewAutoresizingFlexibleHeighttương ứng.

Tôi thích sử dụng UIViewAutoresizingFlexibleMarginsvì sau này tôi có thể tham khảo nó như sau:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

thay vì

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

Tôi thường thấy các lề này HOẶC cùng nhau trên một dòng như ví dụ trên. Chỉ khó đọc.


4
Linh hoạt theo mọi hướng nên là (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) Tôi đoán vậy? Hay là tôi lại bối rối!
Raj Pawan Gumdal

4
Linh hoạt sẽ làm cho phần tử ở giữa (không ôm lề trái, trên, phải hoặc dưới). Chiều rộng / chiều cao linh hoạt sẽ làm cho phần tử ui tăng / thu nhỏ tương ứng.
Sam

4
Bây giờ mọi thứ đã rõ ràng chưa? Ngoài ra, tôi thực sự có ý đó khi tôi nói tôi đánh giá cao bài viết của bạn. Tôi thực sự thích nó b / c điều này đã làm tôi bối rối trong quá khứ. Tôi nghĩ đó là một Q. tuyệt vời
Sam

3
Vâng, cảm ơn, giờ tôi đã hiểu, "Lợi nhuận linh hoạt" và "Chiều rộng / chiều cao linh hoạt". Điều đó giải thích tất cả, và "không ôm lề trái, trên, phải hoặc dưới" của bạn là một cách giải thích tốt :)
Raj Pawan Gumdal

0

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

Kích hoạt mũi tên dọc / ngang (được gọi là lò xo) bên trong hộp sẽ giúp chiều cao / chiều rộng linh hoạt. Nhưng cho phép một đường bên ngoài (được gọi là strut) sẽ làm cho bên đó không linh hoạt / không linh hoạt.

Kích hoạt đường bên trái (thanh chống bên trái) không tương đương với việc bật UIViewAutoresizingFlexibleRightMargin. Thay vào đó, UIViewAutoresizingFlexibleRightMargin= bật nếu thanh chống bên phải bị vô hiệu hóa, tắt nếu thanh chống bên phải được bật.

Nó khá khó hiểu lúc đầu, nhưng nếu bạn nhìn kỹ, có một sự khác biệt trong lò xo và thanh chống. Tôi không biết tại sao Apple làm điều này, nhưng đối với tôi, có một số trường hợp dễ sử dụng hơn. Và sử dụng các thuộc tính ngược lại trong mã thậm chí còn khó hiểu hơn.


0

Swift 4 sử dụng cái này

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

Mục tiêu-C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
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.