2010-08-10 35 views
7

Tôi đã thấy ví dụ của Apple "TableSearch" khi chạm vào các nút phạm vi của nó sẽ xuất hiện bên dưới thanh tìm kiếm. http://developer.apple.com/iphone/library/samplecode/TableSearch/Introduction/Intro.htmlTại sao UISearchBar và các nút phạm vi của nó được hiển thị trong một dòng?

Nhưng khi tôi làm của riêng tôi nó có vẻ tốt lúc đầu nhưng khi tôi chạm vào nó trông giống như xấu xí, các nút phạm vi và thanh tìm kiếm được hiển thị trong cùng một dòng như thế này: http://cl.ly/BN9

Tôi phải làm gì để làm cho nó giống như "TableSearch" ví dụ trong iPad?

tôi đang làm tất cả mọi thứ trong IB và cố gắng sửa đổi vào thanh tìm kiếm programatically từ bộ điều khiển:

- (void)viewDidLoad { 

     [super viewDidLoad]; 
     self.tableView.rowHeight = 88.0f; 
     self.tableView.contentOffset = CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height); 
self.searchDisplayController.searchResultsTableView.rowHeight = self.tableView.rowHeight; 


    //BELOW DID NOT WORK: 
    CGRect b = self.searchDisplayController.searchBar.bounds; 
    self.searchDisplayController.searchBar.bounds = CGRectMake(b.origin.x, b.origin.y, b.size.width, self.tableView.rowHeight); 
    b = self.searchDisplayController.searchBar.frame; 
    self.searchDisplayController.searchBar.frame = CGRectMake(b.origin.x, b.origin.y, b.size.width, self.tableView.rowHeight); 

    //BELOW WORKS PERFECT BUT IS A PRIVATE METHOD, HENCE I AM NOT SUPPOSED TO USE IT 
    //[self.searchDisplayController.searchBar setCombinesLandscapeBars:NO]; 

    } 

Cảm ơn trước.

Trả lời

10

Tôi cũng đã gặp lỗi này và cả hai đều đã gửi báo cáo với Apple và yêu cầu hỗ trợ kỹ thuật. Tôi sẽ cho bạn biết làm thế nào nó đi. Trong thời gian chờ đợi, tôi sẽ cung cấp cho bạn một chút thông tin cơ bản về lỗi này.

Trên iPhone, để bảo toàn bất động sản màn hình dọc quý giá ở chế độ ngang, UISearchDisplayController đặt UISearchBar để kết hợp thanh tìm kiếm và trường tìm kiếm theo một bố cục ngang duy nhất. Điều này hoạt động khá tốt vì kích thước màn hình ngang tăng lên (480 điểm trong Cảnh). Thật không may, nó hoạt động không tốt trên iPad, ở chế độ Landscape, thay đổi giao diện người dùng thực sự không cần thiết ngay từ đầu vì bạn có nhiều bất động sản theo chiều dọc. Bạn cũng vẫn chỉ có 320 pixel không gian hiển thị ngang trong chế độ xem chính của UISplitViewController, chứ không phải tăng 480 của iPhone. Kết quả là một iSore.

Có lẽ vấn đề là UISearchDisplayController hoạt động kém trong phương thức willRotateToInterfaceOrientation: duration: của nó. Cụ thể, nó không làm phiền để kiểm tra xem nó trên iPhone hay không trước khi nó đặt thuộc tính combinedLandscapeBars trên UISearchBar của nó. KOMge API riêng trong mã của bạn hoạt động vì nó sửa lỗi giám sát đó trong UISearchDisplayController. Nhưng tất nhiên Apple sẽ làm giảm cơn giận dữ của người cổ đại đối với bạn vì sử dụng các API không có giấy tờ, vì vậy bạn không thể. Thực sự chúng ta đang ở lòng thương xót của Apple trên cái này.

Nếu bạn sẵn sàng từ bỏ kẹo mắt và tiện lợi của UISearchDisplayController, bạn có thể sử dụng UISearchBar sans UISearchDisplayController và tự quản lý các khía cạnh của bản trình bày. Rõ ràng điều này đòi hỏi nhiều mã hơn và sẽ là vô nghĩa nếu các kỹ sư API của Apple đã thực hiện công việc của họ, nhưng ít nhất nó sẽ giải quyết lỗi hiển thị.

Nếu bạn là Apple, bạn có thể sử dụng các API không có giấy tờ của riêng mình, đó là lý do tại sao Mail.app không có vấn đề này.

CẬP NHẬT

Báo cáo lỗi tôi đã nộp cho Apple là # 8.344.719.

+0

tôi thấy ba người nói rằng đã thông báo rằng lỗi. Bạn có thể nói số lỗi không? – nacho4d

+0

Lý do Mail.app không có vấn đề này là vì nó không sử dụng UISearchDisplayController. Không có ứng dụng iPad nào của Apple thực hiện, đó có thể là lý do tại sao lỗi này tồn tại. – Darren

+0

Tôi cũng đã gửi một lỗi. Đó là # 9689005. – Moshe

0

Khi bạn thiết lập các giới hạn và khung cho thanh tìm kiếm, giống như cho khung ở đây:

blabla.searchBar.frame = CGRectMake(b.origin.x, 
            b.origin.y, 
            b.size.width, 
            self.tableView.rowHeight); 

nó có vẻ như có một vấn đề với chiều cao. Nút phạm vi yêu cầu một số không gian dưới thanh tìm kiếm, vì vậy bạn nên tăng chiều cao của cả hai giới hạn và khung.

Nếu bạn hiển thị và ẩn các nút phạm vi trên một số sự kiện, bạn cần phải điều chỉnh kích thước khung hình mỗi lần.

0

tôi nhận được vấn đề này trên iPad, nhưng tôi có thể lấy nó để làm việc nếu tôi chèn này trong tập tin thực thi của tôi:

@synthesize tableView; 

Tôi đoán có cái gì đó xấu với XIB được nạp nhưng tôi không biết tại sao điều này lại khắc phục được.

1

Sử dụng đoạn mã sau, bạn sẽ không nhận được cảnh báo:

if ([self.searchDisplayController.searchBar respondsToSelector:@selector(setCombinesLandscapeBars:)]) 
{ 
    objc_msgSend(self.searchDisplayController.searchBar, @selector(setCombinesLandscapeBars:), NO); 
} 
Các vấn đề liên quan