2012-07-08 35 views
6

Tôi đang triển khai ngăn chứa UIViewcontroller. Trong ví dụ dưới đây tôi đặt kích thước khung của các bộ điều khiển con trong bộ điều khiển gốc. Chế độ xem con xuất hiện dưới dạng kích thước tôi đã đặt, tuy nhiên khi tôi kiểm tra giới hạn của nó trong vùng chứa1, báo cáo có kích thước khác với kích thước tôi đã đặt.xem kích thước khung điều khiển trong bộ điều khiển con

Rootcontroller (container)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


self.containA = [[Container1 alloc]init]; 
self.containB = [[Container2 alloc]init]; 

self.containA.view.frame = CGRectMake(50, 50,50, 50); 
self.containB.view.frame = CGRectMake(50, 50, 300, 300); 

    [self addChildViewController:self.containA]; 
    [self addChildViewController:self.containB]; 

    [self.view addSubview:self.containA.view]; 

Container1

-(void)viewDidLoad { 
    [super viewDidLoad]; 




UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
//[self.view addSubview:view]; 
self.view = view; 
self.view.backgroundColor = [UIColor redColor]; 
[view release]; 
NSLog(@"view dims %f %f",self.view.bounds.size.width,self.view.bounds.size.height); 
} 

điều khiển đầu ra từ thùng chứa 1 nhìn mờ 768,000000 1004,000000

Tôi nghĩ vấn đề có liên quan đến việc thiết lập khung nhằm UIScreen màn hình chính] applicationFrame .Tôi đã xóa tất cả mã này để uiview được tạo tự động. Vấn đề vẫn còn ..

+0

Tôi khá tự tin, btw, rằng thiết lập self.view bên trong viewDidLoad là một sai lầm. Có lẽ bạn đang nghĩ đến loadView? http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW1 –

+0

@ctrahey đúng, bạn chắc chắn không được đặt chế độ xem của bạn bên trong '-viewDidLoad'. Nếu bạn đang lập trình tạo chế độ xem của mình thay vì sử dụng bảng phân cảnh hoặc ngòi bút, bạn phải tạo nó và đặt nó là '-loadView'. Ngoài ra, một bộ điều khiển xem nên thực sự không bao giờ thay đổi khung của khung nhìn. Bộ điều khiển chính hoặc cửa sổ luôn được thực hiện. –

+0

cảm ơn cho hướng dẫn, vì vậy trong trường hợp của tôi, nơi tôi có hai bộ điều khiển xem lồng nhau trong một phụ huynh, làm thế nào tôi sẽ thiết lập kích thước của họ từ cha mẹ? Tôi có thể đặt nó trong mỗi bộ điều khiển chính nó, nhưng như bạn đã đề nghị và tôi sẽ đồng ý này isn không phải là cách thanh lịch nhất để làm mọi thứ. Xin lỗi cho 101 câu hỏi nhưng Im sử dụng để xem một bộ điều khiển cho mỗi màn hình, công việc ngăn chặn này là tất cả mới với tôi. – coasty

Trả lời

5

Xem khung không thực sự có thể sử dụng được trong viewDidLoad; bạn nên di chuyển tất cả mã thao tác hình học của bạn vào viewWillAppear. Hệ thống sẽ thay đổi bất kỳ thay đổi nào bạn đặt trong viewDidLoad giữa đó và khi đó là về tom xuất hiện trên màn hình.

+23

Thực ra, bạn nên di chuyển các thay đổi hình học sang '-viewDidAppear' trước iOS 5 và sang '-viewWillLayoutSubviews' cho iOS 5+. '-viewWillAppear:' có thể không thực sự có giới hạn/định hướng chính xác nếu chế độ xem đang được làm động. –

+0

Cảm ơn, @JasonCoco; lời khuyên tốt :-) –

+0

Cảm ơn @ctrahey Tôi đã cố gắng xác định điều đó. –

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