2011-08-30 27 views
6

Tôi muốn đặt một phụ UIView (sub_UIView) như là một subview của phụ huynh UIView (parent_UIView). Khi parent_UIView thay đổi kích thước/di chuyển, sub_UIView sẽ giữ nguyên vị trí tương đối của parent_UIView. Ví dụ: sub_UIView nằm ở góc dưới cùng bên phải của parent_UIView. Khi parent_UIView di chuyển, sub_UIView sẽ ở lại góc dưới cùng bên phải của parent_UIView tự động.Làm cách nào để tự động xử lý vị trí tương đối trong iOS?

Tôi đã quản lý để thực hiện việc này theo cách thủ công bằng cách cập nhật khung của sub_UIView khi khung của parent_UIView di chuyển, nhưng cách thực hiện điều này tự động trong iOS? có bất kỳ tài sản cho điều này? (tương tự như autoresizingmask để thay đổi kích thước các bản xem trước)

Cảm ơn!

+0

Tại sao bạn không thể đặt 'autoresizingMask' một cách thích hợp trên con bạn' UIView'? Sau khi tất cả, đó là một subview nếu bạn làm cho nó con của một cái nhìn khác! –

+0

Cảm ơn bạn đã trả lời. Tôi đã làm điều này trong subview: – androidkc

+0

[self setAutoresizingMask: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin]; nhưng dường như không hoạt động. – androidkc

Trả lời

4

cập nhật phản ứng cũ, mà chỉ đề cập thay đổi kích thước mặt nạ

Autolayout (iOS 6)

Trong iOS 6, autolayout đã được bổ sung, mặc dù, kinda xấu xí để làm việc với XCode trong một kịch bản/xib. Autolayout là cách quá lớn để giải thích, nhưng bản chất của nó, đó là một tập hợp các quy tắc giữa các khung nhìn trong hệ thống phân cấp. Do đó, bạn có thể dán vị trí x của một khung nhìn vào đường viền bên phải của khung nhìn cha mẹ. Xem Auto Layout Programming Guide

Mặt nạ Autoresizing (iOS 2)

Hãy nhìn vào các tùy chọn trong Kích Inspector:

Autoresizing and positioning inside a view

Đây là tương đương với việc làm

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight; 

Lưu ý rằng có sự khác biệt giữa việc thực hiện nó bằng mã và thực hiện nó thông qua IB. Các thiết lập autoresizing IB cho các biên giới làm việc như thanh chống, chọn một trong những quyền, ví dụ, có nghĩa là, "biên giới bên phải của tôi bây giờ bị mắc kẹt vào biên giới bên phải của superview".

Mặt khác, mã ngược lại, nơi bạn cần xác định đường viền nào không phải là đường viền, còn được gọi là. chúng rất linh hoạt. Chiều cao và chiều rộng hoạt động bình thường.

Layout subviews (iOS 2, nhưng gotchas cho iOS5 +)

Nếu mọi thứ đều thất bại, không bắt đầu làm vị trí thủ công ở khắp mọi nơi, tôi đã ở vị trí đó, và nó chỉ dẫn đến unmaintanable, mã spaghetti, trong đó ba hoặc nhiều phương thức đang rối tung với cùng một thuộc tính chế độ xem.

Thay vào đó, bạn muốn thực hiện tất cả các vị trí tùy chỉnh của mình trên UIView -layoutSubviews. Phương thức này được gọi khi cần thiết khi một số setNeedsLayout đã được kích hoạt, ví dụ: khi chiều rộng của chế độ xem thay đổi, các bản xem trước sẽ nhận được sự kiện bản xem trước bố cục. Ngoài ra, việc thực hiện các giao diện xoay dễ dàng hơn nhiều, vì phương thức này được gọi cho chiều rộng mới, để xác định cách hoạt ảnh sẽ trông như thế nào.

Hãy nhớ rằng các bản xem trước bố cục hoạt động sau khi Mặt nạ tự động/Tự động thay đổi kích thước đã được thực hiện.

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