Mọi người đều biết rằng bạn không thể tin tưởng kích thước khung hình trên phương thức init/viewDidLoad của UIViewController; này:UIViewController viewDidLoad chiều rộng/chiều cao không chính xác
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
sẽ in kích thước sai trong nhiều dịp (đặc biệt là nó được khá nhiều chia ở chế độ nằm ngang)
Điều này sẽ thực sự trả về kết quả lúc nào cũng khắc phục vì vậy nó tốt để bố trí các subviews:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
Vấn đề là viewWillAppears được gọi mỗi khi chế độ xem xuất hiện, do đó, nó không phù hợp để phân bổ hoặc thêm các bản xem phụ. Vì vậy, bạn kết thúc tuyên bố mỗi lần xem trong giao diện và bạn kết thúc với các tệp tiêu đề lớn mà tôi không thích chút nào vì hầu hết các mục không cần thao tác nhiều hơn sau khi thiết lập ban đầu.
Vì vậy, câu hỏi đặt ra là: Có cách nào tốt hơn để xử lý vị trí xem phụ không?
Câu hỏi hai là rất có liên quan, giả sử tôi có một lớp con của UIView bao gồm các phần phụ khác. Tôi khai báo nó bên trong giao diện của tôi, và tôi phân bổ/init nó trong phương thức init/viewDidLoad của tôi.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
Như chúng ta đã biết bây giờ chúng ta cần phải định vị lại nó trong viewWillAppear để có được một kết quả chính xác hơn
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
Vấn đề là tất nhiên tất cả các subviews cần phải được thay đổi vị trí là tốt. Điều này được thực hiện bởi hàm layoutSubviews được gọi tự động, nhưng chúng tôi gặp vấn đề tương tự: Tất cả các bản xem trước cần phải được khai báo bên trong giao diện của lớp SNKSlidingMenu .. Có cách nào xung quanh vấn đề này không?
Cảm ơn.
sử dụng tự động trả lời hoặc đặt tự động hóa mặt nạ? – jrturton