Tôi đã thiết lập ba ViewControllers để xử lý ba chế độ xem. Vấn đề mà tôi đang gặp là ở chế độ mô phỏng, hướng LandscapeRight (đó là thứ tôi muốn) và chế độ xem đầu tiên hiển thị chính xác ở chế độ xem ngang đó, nhưng khi tôi chuyển sang chế độ xem thứ hai và thứ ba, chúng sẽ hiển thị xoay 90 độ ngược chiều kim đồng hồ với góc trên bên trái của chế độ xem ở góc dưới bên trái của màn hình của điện thoại. Tôi đã cố gắng để gỡ lỗi này trong một vài ngày và gần nhất mà tôi đã nhận được một đầu mối là truy tìm nó theo cách sau:Chỉ lần đầu tiên UIView thêm chế độ xem addSubview hiển thị đúng hướng
Sau đây là trong ứng dụng ủy quyền của tôi:
NSLog(@"1");
[window addSubview:welcomeController.view];
NSLog(@"2");
[window addSubview:goalController.view];
NSLog(@"3");
[window addSubview:planningController.view];
NSLog(@"4");
[window bringSubviewToFront:welcomeController.view];
NSLog(@"5");
mỗi ViewControllers tôi thực hiện một cái gì đó tương tự như sau (thay đổi duy nhất là tên của bộ điều khiển chuyển ra trong chuỗi truyền cho NSLog):
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
NSLog(@"called for WelcomeController");
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
với điều đó, tôi nhận được đầu ra sau trên Console:
a
called for WelcomeController
called for WelcomeController
called for WelcomeController
called for WelcomeController
2
called for GoalController
3
called for PlanningController
4
5
Tôi tìm thấy điều thú vị làAutorotateToInterfaceOrientation được gọi là 4 lần cho chế độ xem đầu tiên được thêm vào, trong khi hai chế độ khác chỉ được gọi một lần. Tôi hy vọng rằng điều này có thể là vì nó phải thực hiện một số thiết lập lúc đầu (và tôi tin rằng trình mô phỏng bắt đầu ở chế độ dọc, vì vậy nó có thể gọi nó trong khi đang quay), nhưng tôi thấy sự tương quan có chút nghi ngờ.
Tôi đã chuyển thứ tự xung quanh để addSubview được gọi cho mục tiêuController đầu tiên và welcomeController thứ hai. Trong trường hợp này, đó là goalController hiển thị theo hướng ngang chính xác (thường là bộ điều khiển chào mừng). Điều này dường như để loại bỏ các tập tin XIB của tôi và ViewControllers mình. Tôi không chắc tại sao cái nhìn đầu tiên mà addSubview được gọi là đặc biệt. Tôi cũng đã thử sử dụng insertSubview tại chỉ mục 0 với cùng kết quả.
Điều này dường như không giúp mã của tôi. Tôi đã thử đặt các cuộc gọi cho cả hai targetController và planningController trước và sau các cuộc gọi addSubview tương ứng (tôi thậm chí đã thử chuyển đổi 300 và 480;) Nó dường như tạo sự khác biệt tại một số điểm bởi vì thay vào đó có chế độ xem chào mừng trong nền của phần của màn hình không được bao phủ, nó chỉ là màu trắng, vì vậy tôi nghĩ rằng nó phải được kéo dài một cái gì đó trên màn hình. –
Một điều mà tôi nhận thấy từ bài đăng của bạn là dường như bạn có chế độ xem bảng đang hiển thị ở chế độ dọc, để lại khoảng 1/3 khoảng trống trang. Tôi đang nhận được cùng một điều, ngoại trừ quan điểm của tôi được xoay 90 độ để những gì nên được đầu là chỉ còn lại. –
Tôi thiết kế mọi thứ trong IB với định hướng phong cảnh, đó có thể là lý do tại sao mọi thứ đang hướng đúng cách, nhưng không chiếm toàn bộ màn hình. Tôi bắt đầu với mainWindow, tới viewControllers, và các khung nhìn, tất cả đều ở trong khung cảnh. Giống như bạn, nếu tôi thay đổi thứ tự bộ điều khiển chế độ xem của tôi, thì tùy theo điều kiện nào trước tiên, không cần cuộc gọi setFrame. – mahboudz