2012-05-06 36 views
46

Tôi đã trình bày một số phần phụ với Interface Builder, nhưng thay vào đó tôi muốn thực hiện nó.UIView autoresizingMask - Trình tạo giao diện thành mã - Tạo lập trình struts và lò xo - Lập trình hoặc Objective-C

Tôi đã đọc UIView docs về cách đặt thuộc tính view.autoresizingMask. Tôi đang tìm kiếm giải thích hợp lý về cách dịch các thanh chống và lò xo bằng cách sử dụng các mặt nạ khác nhau được cung cấp (ví dụ: UIViewAutoresizingFlexibleLeftMargin, v.v ...).

Trả lời

115

Khi cài đặt mặt nạ autoresizing cho một cái nhìn, sử dụng một Bitwise bao gồm OR (|) (Objective-C), hoặc một mảng (Swift 2, 3) để xác định suốithanh chống.

  • Springs được đại diện bằng cách xác định một mặt nạ (Objective-C hoặc Swift 3, tương ứng):

    • dọc mùa xuân: UIViewAutoresizingFlexibleHeight hoặc .flexibleHeight

    • ngang mùa xuân: UIViewAutoresizingFlexibleWidth hoặc .flexibleWidth

  • Struts được thể hiện bằng cách thiếu một trong bốn mặt nạ 'lề linh hoạt' (tức lànếu một strut không tồn tại, mặt nạ cho lợi nhuận được chỉ định):

    • UIViewAutoresizingFlexibleLeftMargin hoặc .flexibleLeftMargin

    • UIViewAutoresizingFlexibleRightMargin hoặc .flexibleRightMargin

    • UIViewAutoresizingFlexibleTopMargin hoặc .flexibleTopMargin

    • UIViewAutoresizingFlexibleBottomMargin hoặc .flexibleBottomMargin

Ví dụ, một cái nhìn với một mùa xuântrên và dưới thanh chống ngang sẽ có chiều rộng, và trái và lề đúng quy định như linh hoạt:

Swift 3

mySubview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin] 

Swift 2

mySubview.autoresizingMask = [.FlexibleWidth, .FlexibleLeftMargin, .FlexibleRightMargin] 

Swift 1,2

mySubview.autoresizingMask = .FlexibleWidth | .FlexibleLeftMargin | .FlexibleRightMargin 

Objective-C

mySubview.autoresizingMask = (UIViewAutoresizingFlexibleWidth |  
           UIViewAutoresizingFlexibleLeftMargin | 
           UIViewAutoresizingFlexibleRightMargin); 

enter image description here

+3

@Flink - chỉnh sửa của bạn là sai. Tôi đã hoàn nguyên câu trả lời của mình về trạng thái ban đầu. Vui lòng đọc cẩn thận, đặc biệt là: "Struts được thể hiện bằng cách thiếu một trong bốn mặt nạ 'linh hoạt lề' (ví dụ: nếu thanh chống KHÔNG tồn tại, mặt nạ cho lề đó được chỉ định):" – MattyG

+0

Xin lỗi, thất bại của tôi. .. – Shmidt

+0

rất hữu ích, cảm ơn – kukudas

8

UIViewAutoResizingMask là những gì chúng tôi gọi là 'thanh chống' và 'lò xo'. Hãy xem xét điều này: bạn có một hình vuông lớn với một hình vuông nhỏ bên trong. Để cho hình vuông đó nằm hoàn toàn ở giữa, bạn phải đặt chiều rộng cố định từ mỗi cạnh bên trong của hình vuông lớn, để hạn chế nó. Đây là những thanh chống.

Springs, mặt khác, hoạt động giống như UIView hoạt động trong khi quay. Giả sử quan điểm của chúng ta phải nằm ở dưới cùng của màn hình, căn chỉnh ở giữa (giống như một thanh công cụ). Chúng tôi muốn giữ cho nó là mùa xuân hàng đầu linh hoạt để khi xem quay từ 460 px đến 320 px, nó giữ nó cùng một vị trí tương đối so với kích thước của màn hình bây giờ thay đổi. Làm nổi bật một trong những lò xo trong IB bằng thiết lập UIViewAutoResizingMask thích hợp và làm nổi bật mùa xuân đặc biệt là giống như gọi myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin.

giá trị có thể được sử dụng song song bởi bao quanh họ trong một cặp ngoặc đơn và sử dụng một hoặc điều hành như myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)

Những chiếc mặt nạ được báo cáo con số để bạn bởi vì họ là một typdef của một NSUInteger và đó là những lá cờ đó táo đã giao cho họ. Cmd + bấm vào một để xem phương pháp defintion của nó.

Các vấn đề liên quan