Tôi đang viết một ứng dụng iPhone (giống như hầu hết các ứng dụng) hỗ trợ xoay tự động: Bạn xoay điện thoại của mình và chế độ xem xoay vòng và thay đổi kích thước phù hợp.iOS: Tiêu đề của thanh điều hướng không thay đổi kích thước chính xác khi điện thoại quay
Nhưng tôi chỉ định chế độ xem tùy chỉnh cho navigationItem.titleView
(vùng tiêu đề của thanh điều hướng) và tôi không thể làm cho chế độ xem đó đổi kích thước chính xác khi điện thoại xoay.
Tôi biết bạn đang nghĩ gì, "Chỉ cần đặt autoresizingMask
thành UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
", nhưng nó không đơn giản như vậy. Tất nhiên, nếu tôi không đặt chế độ xem của tôi là autoresizingMask
thì chế độ xem của tôi không thay đổi kích thước; và tôi muốn nó đổi kích thước.
Vấn đề là, nếu tôi làm đặt autoresizingMask
, sau đó thay đổi kích thước chính xác miễn là chế độ xem đó hiển thị; nhưng kích thước của titleView
bị rối loạn trong trường hợp này:
- Chạy ứng dụng, với điện thoại được giữ ở chế độ dọc. Mọi thứ trông có vẻ tốt.
- Làm điều gì đó khiến ứng dụng đẩy chế độ xem khác lên ngăn điều hướng. Ví dụ. nhấp vào một hàng hoặc nút của bảng có chức năng gọi đến
[self.navigationController pushViewController:someOtherViewController animated:YES]
. - Trong khi xem bộ điều khiển con, xoay điện thoại sang ngang.
- Nhấp vào nút "Quay lại" để quay lại chế độ xem cấp cao nhất. Tại thời điểm này, chế độ xem tiêu đề bị rối loạn: Mặc dù bạn đang cầm điện thoại ở chế độ ngang, chế độ xem tiêu đề vẫn có kích thước như thể bạn đang cầm nó ở chế độ dọc.
- Cuối cùng, xoay điện thoại trở lại chế độ dọc. Bây giờ mọi thứ trở nên tồi tệ hơn: Chế độ xem tiêu đề co lại theo kích thước (vì thanh điều hướng trở nên nhỏ hơn), nhưng vì nó đã quá nhỏ nên giờ là nhiều quá nhỏ.
Nếu bạn muốn tái sản xuất này cho mình, hãy làm theo các bước sau (đây là một chút công việc):
- Hãy một ứng dụng sử dụng Xcode của "Navigation dựa trên ứng dụng" wizard.
- Thiết lập để chế độ xem bảng cấp cao nhất có các hàng, khi bạn nhấp vào chúng, hãy đẩy chế độ xem chi tiết vào ngăn điều hướng.
Bao gồm mã này trong cả hai bộ điều khiển xem cấp cao nhất và bộ điều khiển xem chi tiết:
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }
Bao gồm mã này chỉ trong bộ điều khiển xem top-level:
- (void)viewDidLoad { [super viewDidLoad]; // Create "Back" button UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Master" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton; [backButton release]; // Create title view UILabel* titleView = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,500,38)] autorelease]; titleView.textAlignment = UITextAlignmentCenter; titleView.text = @"Watch this title view"; // If I leave the following line turned on, then resizing of the title view // messes up if I: // // 1. Start at the master view (which uses this title view) in portrait // 2. Navigate to the detail view // 3. Rotate the phone to landscape // 4. Navigate back to the master view // 5. Rotate the phone back to portrait // // On the other hand, if I remove the following line, then I get a different // problem: The title view doesn't resize as I want it to when I: // // 1. Start at the master view (which uses this title view) in portrait // 2. Rotate the phone to landscape titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.navigationItem.titleView = titleView; }
Cuối cùng , hãy làm theo các bước repro của tôi.
Vì vậy, tôi đang làm điều gì đó sai? Có cách nào để làm cho titleView của tôi luôn thay đổi kích thước chính xác không?
Lấy mã của bạn chính xác và nó hoạt động tuyệt vời cho tôi, cảm ơn! – esilver
Tôi có thể đã quá trễ (4-5 năm lol), nhưng tôi có thể yêu cầu ... trong AutoLayout ... điều này "không thay đổi kích thước" công cụ vẫn xảy ra với bạn? Tôi đang làm việc với Storyboards và UINavigationControllers, khi tôi đặt tiêu đề thực sự dài (cho phép nói ... 100 ký tự trở lên), khi xoay iPhone, nó hoạt động tốt nhưng tại một thời điểm nó đơn giản giữ kích thước ngang cho chế độ xem tiêu đề khi được xoay sang dọc. Tôi không biết phải làm gì. Nếu không có cá nhân hóa (kéo Navcontroller + Root xem bộ điều khiển mà không có các lớp tùy chỉnh) điều này vẫn còn xảy ra. Điều đó khiến tôi phát điên, trông giống như lỗi iOS ... –