2014-10-14 15 views
15

Hiện tại tôi đang cố gắng nhúng UISearchController vào ứng dụng của mình. Nhưng UISearchBar, thuộc tính của UISearchController, không được hiển thị đúng cách, nếu UINavigationBar không phải là mờ. Thông thường sau khi khai thác tài sản UISearchBar, UINavigationBar di chuyển lên để nhường chỗ cho UISearchBar. Bạn có thể xem kết quả trên màn hình sau đây:UISearchController không hoạt động đúng với UINavigationBar không mờ mờ

https://www.dropbox.com/s/172k63zr2bhj84t/Normal_behaviour.png?dl=0

Nhưng nếu "mờ" của tài UINavigationBar được thiết lập để "KHÔNG", UISearchBar không được hiển thị đúng, bởi vì nền của thanh trạng thái vẫn còn trong suốt, như bạn có thể nhìn thấy trên ảnh chụp màn hình sau đây:

https://www.dropbox.com/s/v5cnxoj9ms6976r/Wrong_behaviour.png?dl=0

Để chứng minh hành vi kỳ lạ này, tôi đã sửa đổi dự án mẫu được cung cấp bởi Apple:

https://developer.apple.com/library/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html 

đây bạn có thể tải về phiên bản sửa đổi:

https://www.dropbox.com/s/7icfe6kap98g1e8/TableSearchwithUISearchControllerObj-CandSwift_MODIFIED.zip?dl=0 

Việc sửa đổi là trong tập tin "APLMainTableViewController.m" dòng 33.

+2

Vâng, tôi cũng thấy điều này. Rất bực bội. –

Trả lời

6

Một workaround cho điều này là làm cho thanh trạng thái mờ ngay trước khi tìm kiếm sẽ trở thành hoạt động và xóa độ mờ khi tìm kiếm sắp trở thành không hoạt động.

Bạn có thể thực hiện việc này bằng cách đăng ký bộ điều khiển xem của bạn với tư cách là đại biểu của UISearchController và triển khai các phương pháp willPresentSearchControllerwillDismissSearchController. Ví dụ (trong Swift):

Khai báo điều khiển xem bạn như là một đại biểu của UISearchController:

class MyViewController: UITableViewController, UISearchControllerDelegate 

Đừng quên để thực sự thiết lập nó như là các đại biểu, ví dụ trong viewDidLoad add:

searchController.delegate = self 

Và cuối cùng:

func willPresentSearchController(searchController: UISearchController) { 
    navigationController?.navigationBar.translucent = true 
} 

func willDismissSearchController(searchController: UISearchController) { 
    navigationController?.navigationBar.translucent = false 
} 
+0

Điều này làm việc cho tôi. Tại sao Apple thậm chí còn hỗ trợ thay đổi barTintColor trên thanh điều hướng? –

15

Rõ ràng là một lỗi (rdar://20942583).

workaround của tôi là để thiết lập

self.edgesForExtendedLayout = UIRectEdgeAll; 
self.extendedLayoutIncludesOpaqueBars = YES; 

này cho phép bạn để giữ cho các thanh điều hướng mờ đục. Nhược điểm là các nội dung chảy bên dưới thanh ngay cả khi nó không thể được nhìn thấy, tạo ra một số chi phí.

+4

Điều chỉnh 'edgesForExtendedLayout' không cần thiết đối với tôi. Nhưng điều này làm việc. –

+0

Điều này cũng phù hợp với tôi. Tôi đã phá hỏng cái đầu này trong hai ngày qua. Tuy nhiên nó đã yêu cầu hai dòng. –

8

Tất cả tôi cần là:

0

nếu ai đó có một vấn đề như không mờ ẩn thanh tìm kiếm u có thể chỉ cần có này:

tự.definePresentationContext = true

Kính trọng

Các vấn đề liên quan