Tôi có một UINavigationController với hai UIViewControllers trên nó (A và B). Từ A, tôi đẩy B lên ngăn xếp. Sau đó, người dùng định hướng lại thiết bị. Tôi cần di chuyển một số thứ xung quanh màn hình (các nút, v.v.) để hiển thị theo hướng mới trên A.Thay đổi hướng UIViewController trong ngăn xếp UINavigationController
Tôi thấy rằng -shouldAutorotateToInterfaceOrientation được gọi trên cả A và B (và trả về CÓ). Nhưng -will/-didRotateFromInterfaceOrientation chỉ nhận được gọi trên ViewController nhìn thấy được (B). Khi B được bật ra khỏi ngăn xếp, A được hiển thị theo hướng mới (chính xác) nhưng không có nút nào được di chuyển khi cần.
Để giải quyết điều này, tôi thấy mình thực hiện các mô hình sau:
trong tập tin tiêu đề:
@interface A : UIViewController {
// ...
UIInterfaceOrientation layoutOrientation;
}
// ...
- (void)orientationChanged;
@end
trong file .m:
- (void)viewDidLoad {
// ...
layoutOrientation = self.interfaceOrientation;
}
- (void)viewWillAppear:(BOOL)animated {
// ...
if (layoutOrientation != self.interfaceOrientation) {
[self orientationChanged];
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self orientationChanged];
}
- (void)orientationChanged {
// move my buttons
layoutOrientation = self.interfaceOrientation;
}
Về cơ bản, tôi đang kiểm tra để xem nếu định hướng thay đổi trong -viewWillAppear và làm công việc để cập nhật giao diện người dùng ở đó nếu cần. Nó hoạt động tốt, nhưng điều này có vẻ (a) tẻ nhạt, và (b) rất nhiều mã trùng lặp giữa các lớp khác nhau của tôi như A. Tôi có thể sửa chữa (b) bằng cách di chuyển mã đến một siêu lớp phổ biến, nhưng điều này vẫn có vẻ giống như một cái gì đó Tôi không nên làm.
Có cách nào tốt hơn để di chuyển các nút của tôi xung quanh trên các chế độ xem không nằm trên cùng trên ngăn điều hướng không? Quan điểm của tôi đến từ .xibs nếu có điều gì đó trong IB tôi cần kiểm tra. Tôi có nên chỉ thiết kế quan điểm của mình sao cho họ không cần phải di chuyển các nút xung quanh khi định hướng thay đổi?
Cảm ơn!
Mike, tôi có tình huống tương tự. Nhưng, trong phương pháp orientationChanged của tôi, tôi có một số tính toán phụ thuộc vào khung nhìn. Chế độ xem khung cho mỗi hướng được đặt do tự động lấy mặt nạ và trong chế độ xemWillAppear: khung Chế độ xem không được đặt cho hướng mới. Do đó, tính toán của tôi là sai. Nhưng, tôi không thể xử lý tính toán này trong viewDidAppear vì người dùng có thể quan sát quá trình chuyển đổi của các phần tử giao diện người dùng (được tính toán). – spd