2011-09-20 35 views
18

Cách xác định chính xác kích thước bố cục chế độ xem của bạn trong loadView?Xác định kích thước chính xác trong loadView

Tôi có các trường hợp khác nhau trong đó UIViewController được đẩy tới một UINavigationController hoặc một UITabBarController hiện diện hoặc cả hai. Những yếu tố này thay đổi khu vực màn hình có sẵn và làm cho nó không phù hợp nếu tôi giá trị mã cứng.

Tại thời điểm loadView được gọi và tôi muốn biết cách kích thước chế độ xem vùng chứa, tôi thêm các bản xem trước của mình vào.

Tôi đã xem qua hướng dẫn UIViewController và Apple sử dụng ứng dụng UIScreen mainScreenFrame, nhưng trong ví dụ của chúng, điều này được thực hiện vì chúng đang tạo một ứng dụng toàn màn hình.

Tôi đã thấy một số câu trả lời ở đây nhưng không có câu trả lời nào giải quyết cách thực hiện điều này một cách nhất quán.

Cảm ơn bạn đã trợ giúp.

+1

Tại sao không sử dụng mặt nạ tự động thay đổi kích thước? – Krumelur

Trả lời

-1

Tôi đã tạo một ứng dụng, nó tải một số UITextViews, UIButtons và kiểm soát UISegment. Những gì tôi đã làm trong viewWillAppear, tôi gọi một phương thức thay đổi kích thước mà tôi đã thực hiện.

Thay đổi kích thước của tất cả các bản xem trước trong UIViewController theo chương trình. Điều này là do autoresizing trong IB chỉ tốt như vậy.

Trong hàm calcViewSize của tôi, tôi nhận được các kích thước như thế này;

CGFloat width = [[UIScreen mainScreen] applicationFrame].size.width; 
CGFloat height = self.view.frame.size.height; //this will retrieve the frame we are drawn into. 

Sau đó, tôi xem qua từng chế độ xem con trong UIViewController mà tôi muốn đổi kích thước và thay đổi khung của nó. Tôi có các thuộc tính cho các khung nhìn này trong IBOutlets, vì vậy tôi đã biết các khung nhìn là gì.

Sử dụng Trình tạo giao diện để nhận thứ nguyên.

Lưu ý cuối cùng: Để thay đổi kích thước trong IB, hãy chọn chế độ xem, chọn thanh tra thuộc tính, tắt Thanh trạng thái, bây giờ trong Trình kiểm tra kích thước, bạn có thể thay đổi kích thước chế độ xem, sắp xếp lại các bản xem phụ và ghi lại các số đặt trong mã của bạn.

+0

Xin chào eSpecialized, cảm ơn cho đầu vào. Vấn đề của tôi là nhiều hơn là tôi không sử dụng IB cho những quan điểm này, nhưng thay vì đặt chúng trong loadView. Nếu tôi sử dụng applicationFrame tôi phải kiểm tra sự hiện diện của thanh tab hoặc thanh điều hướng và tính toán quan điểm của tôi từ đó. Đó là khá lộn xộn phải làm cho mỗi viewController đẩy vào một bộ điều khiển container. – RickiG

12
- (void) loadView { 
    //self.wantsFullScreenLayout = YES; //could add this for translucent status bars 
    UIView *view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease]; 
    self.view = view; 
} 

Từ Apple View Controller Programming Guide để tạo cái nhìn lập trình:

  1. Tạo một đối tượng xem gốc được kích thước để phù hợp với màn hình. Chế độ xem gốc đóng vai trò là vùng chứa cho tất cả các chế độ xem khác được liên kết với bộ điều khiển chế độ xem của bạn. Bạn thường là xác định khung cho chế độ xem này để phù hợp với kích thước của cửa sổ ứng dụng, chính nó sẽ điền vào màn hình . Tuy nhiên, trình điều khiển chế độ xem cũng điều chỉnh kích thước khung hình cần thiết để phù hợp với sự hiện diện của các chế độ xem khác nhau, chẳng hạn như thanh trạng thái hệ thống, thanh điều hướng hoặc thanh tab. Bạn có thể sử dụng đối tượng UIView chung, chế độ xem tùy chỉnh mà bạn xác định hoặc bất kỳ chế độ xem nào khác có thể mở rộng để điền vào màn hình.

Sau đó, ví dụ này tương tự như ví dụ tôi đã viết ở trên.

+1

Tính năng này không hoạt động - bạn không thể truy cập self.view trong loadView. – Eiko

+0

Tôi đã thêm một ví dụ mã thứ hai – bandejapaisa

+2

Khung nhìn ViewController không có thuộc tính chế độ xem trong loadView - nếu tôi gọi [super loadView], tôi sẽ tạo một khung công tác, nhưng ý tưởng là làm cho riêng tôi. – RickiG

0

Câu trả lời "đúng" có thể là tạo lớp con UIView tùy chỉnh và thực hiện tất cả vị trí chế độ xem phụ trong ghi đè bố cụcSubviews của bạn.Phân lớp của bạn sau đó sẽ được gán cho self.view trong loadView.

Tuy nhiên, nó cũng hoạt động để sử dụng viewDidLoad để thêm một chế độ xem phụ có kích thước giống hệt với self.view. (Mặc dù bạn nên chuẩn bị cho chế độ xem này để thay đổi kích thước. - Thiết lập chính xác autoresizingMasks có thể là một cách hay để thực hiện việc này.)

12

Bạn không cần biết kích thước chính xác. VC không cần phải tự kích thước, đó là trách nhiệm của phụ huynh. Chỉ cần tạo một UIView với [[UIView alloc] init] như được xác nhận bởi Kỹ sư Apple UIKit Andy Matuschak trên Twitter: https://twitter.com/andy_matuschak/status/365227892151558144

+2

Điều này đúng và câu trả lời trước của tôi (hiện đã bị xóa) thực sự sai. Bạn cũng có thể sử dụng 'self.view = [[UIView alloc] initWithFrame: CGRectZero];'. Và đừng quên đặt 'self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 'nếu bạn không sử dụng AutoLayout. – Tafkadasoh

+0

Mặt nạ tự động hóa sẽ thực sự không hoạt động nếu kích thước khung ban đầu là 0, vì 0 * x = 0 :). Điều quan trọng là bạn không cần phải thay đổi kích thước kích thước của bộ điều khiển xem: các VC mẹ (hoặc UIWindow nếu nó là một chính) sẽ làm điều này cho bạn. –

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