Tôi đã tìm thấy giải pháp hoạt động, mặc dù nó thực sự là một chút hack.
Ý tưởng là cung cấp cho thanh điều hướng mờ một bản sao đục. Thật không may tôi không hài lòng với giải pháp ở chỗ nó bẩn và không đóng gói và giới thiệu một số vấn đề tiềm năng, nhưng tôi hạnh phúc vì nó đã hoàn thành công việc.
Trong lớp điều khiển chế độ xem cơ sở của ứng dụng của tôi (ví dụ: MyViewController: UIViewController), trong phương thức viewDidLoad, tôi khởi tạo một ivar mới UIView * _navigationBarBG và cung cấp cho nó cùng khung như self.navigationController.navigationBar. Sau đó tôi đặt thuộc tính backgroundColor của nó thành [UIColor whiteColor] mặc dù đây là cách bạn đạt được một số màu hơn tôi đoán. [EDIT: Nếu bạn muốn là một purist (giá trị màu còn lại chính xác như họ đến từ .psd), bạn có thể làm cho _navigationBarBG một UIImageView và sử dụng nền tùy chỉnh của bạn ở đó, và nền của UINavigationBar thực tế bạn thiết lập để vẽ rõ ràng (hoặc kéo dài một hình ảnh 1px trong suốt nếu bạn muốn sử dụng một điển hình 'thay đổi thanh điều hướng bằng cách sử dụng một hình ảnh' công thức đó là ở đâu đó trên internet)]
if(self.navigationController)
{
_navigationBarBG = [[UIView alloc] initWithFrame: self.navigationController.navigationBar.frame];
_navigationBarBG.backgroundColor = [UIColor whiteColor];
[self.view addSubview:_navigationBarBG];
}
THEN, (và đây là một phần không hấp dẫn, nhưng tôi không thấy bất kỳ cách nào khác), tôi thêm chế độ xem này dưới dạng một chế độ xem phụ. NHƯNG, bất cứ khi nào bạn thường thực hiện cuộc gọi đến [self.view addSubview: anyView], bạn phải đảm bảo rằng bạn gọi [self.view insertSubview: anyView belowSubview: _navigationBarBG];
if (_navigationBarBG)
[self.view insertSubview: anyView belowSubview:_navigationBarBG];
else
[self.view addSubview: anyView];
Nếu bạn quên điều đó, các chế độ xem được thêm này sẽ trượt dưới nền thanh điều hướng của bạn và trông lạ. Vì vậy, bạn cần phải biết rằng đây là một nguồn lỗi.
TẠI SAO TÔI LÀM VIỆC NÀY? Một lần nữa bạn có thể yêu cầu ... Tôi muốn có thể có một thanh điều hướng cuộn mà cuộn ra khỏi con đường khi bạn di chuyển xuống xem bảng của bạn, do đó cho người dùng không gian màn hình nhiều hơn nữa.Này được thực hiện bằng cách sử dụng các đại biểu scrollview (scrollViewDidScroll :) và cũng viewWillAppear:
// FIRST DEAL WITH SCROLLING NAVIGATION BAR
CALayer *layer = self.navigationController.navigationBar.layer;
CGFloat contentOffsetY = scrollView.contentOffset.y;
CGPoint newPosition;
if (contentOffsetY > _scrollViewContentOffsetYThreshold && self.scrollingNavigationBarEnabled) {
newPosition = CGPointMake(layer.position.x,
22 - MIN((contentOffsetY - _scrollViewContentOffsetYThreshold), 48.0)); // my nav bar BG image is 48.0 tall
layer.position = newPosition;
[_navigationBarBG setCenter: newPosition]; // if it's nil, nothing happens
}
else
{
newPosition = kNavBarDefaultPosition; // i.e. CGPointMake(160, 22) -- portrait only
layer.position = newPosition;
[_navigationBarBG setCenter: newPosition]; // if it's nil, nothing happens
}
cuối cùng tôi đã đi với giải pháp này và không phải là câu trả lời ở trên. tôi đã thử một thời gian ngắn nhưng không có nhiều thành công. tôi nghĩ rằng iOS làm rất nhiều thiết lập lại của khung self.view, do đó, không muốn gây rối với điều đó. cách tôi trình bày chỉ là 'lưng heo' chuyển động của một thành phần khác mà tôi biết đang hoạt động. nó chỉ là một chút bẩn trong đó bạn phải nhớ làm thế nào để chèn subviews và không thêm subviews và kiểm tra sự tồn tại. nhưng nó hoạt động tốt. – horseshoe7