2017-07-27 49 views
58

iOS 11 ile Apple, köşeleri yuvarlaklaştırarak ve yüksekliği büyüterek UISearchBar'ı yeniden tasarladı. NavigationBar'a bir UISearchBar eklemek, sadece navigationItem.titleView = searchBar kullanarak navigationItem öğesinin titleView olarak ayarlanarak oldukça basittir. Ancak, iOS 11'de artık beklendiği gibi çalışmaz gibi görünmüyor. Sen SearchBar olduğunu açıkça görebilirsiniz enter image description hereiOS 11 NavigationBar'da Ara Çubuğu

iOS 10 enter image description here

iOS 11 iOS 10 ve iOS 11

kullanarak aynı kurulumu karşılaştırmak ekranlar göz at NavigationBar'ın boyutunu artırır, ancak çubuk düğmeleri doğru şekilde hizalanmaz. Ayrıca, searchBar artık soldaki kullanılabilir alanı kullanmaz.

SearchBar'ın daha sonra hiç görülmediği için arama ipucunu iPad'de iptal düğmesini almak için bir sarıcı görünümüne getirme Cancel button is not shown in UISearchBar da artık işe yaramaz.

Herhangi bir benzer sorun varsa veya bunu nasıl düzeltebileceğini/geliştireceğini zaten biliyorsa çok minnettar olurum.

Bu, Xcode 9 Beta 4 kullanılarak geliştirilmiştir. Belki de gelecekte yayımlanacak bu sorun giderilecektir.

GÜNCELLEME: Bu çözümden sonra kullanmaya karar tamir olmadığından

. NavBar'a yeni bir UIBarButtonItem ekledik ve basıldığında yeni bir ViewController sunacağız, burada sadece bir searchBar ve NavBar'a şimdi iyi görünen hiçbir şey koymadığımız bir yeni ViewController sunuyoruz. Seçilen yanıtın kullanılması en iyi çözüm olabilir çünkü iOS 11 ile Apple, orijinal olarak istediğimiz sonucu vermese bile bu yeni tasarımı kullanmamızı istiyor. Bunu çözmenin başka bir yolu, özel bir SearchBar olabilir, ancak bu başka bir konudur.

cevap

38

iOS'taki navigationItem yeni searchController özelliği böyle 11.

https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller

kullanın var

if #available(iOS 11.0, *) { 
    navigationItem.searchController = searchController 
} else { 
    // Fallback on earlier versions 
    navigationItem.titleView = searchController?.searchBar 
} 

(Beta 6 sırasındaki Yazma) ifade şöyle görünürse: f navigationItem.hidesSearchBarWhenScrolling = false'u ayarlamıyorsanız, kullanıcı bunu göstermek için aşağı kaydırmazsa, arama çubuğu başlangıçta gizlenebilir. Bunu false olarak ayarlarsanız, kullanıcının kaydırması gerekmeden başlığın nereye gideceği aşağıda yığılmış olarak görünür.

+1

Cevabım coco cevabına benzer, ancak bağlantıyı ve kodu biraz açıklığa kavuşturmaya yardımcı olabileceğini düşündüm. –

+22

Bu, sonuçları orijinal olarak açıklanmadı. SearchController özelliğini kullanmak, arama çubuğunu gezinmenin altına koyacaktır. – Molanda

+0

Bu iPhone üzerinde çalışır, ancak benim için iPad üzerinde çalışmıyor. – Starchand

1

UISearchController nesnesine yeni UINavigationItem.searchController özelliğini ayarlamayı düşünmeniz gerekecek. Mesajlarda görüldüğü gibi yeni etkiyi böyle alırsınız. Görünüşe göre eski davranış sadece düz gitti. Umarım yanıldım, ama tüm API 11 için bir revizyon aldı. Genelde buggy olduğunu biliyorum, bu yüzden daha yeni beta'lar ve GM sabitleşirse göreceğiz. Objective-C ise ...

3

Aynı sorunu yaşıyordum ve sorunu gideren bir kaç gün sonra bu sayfayı buldum - https://translate.google.com/translate?hl=en&sl=zh-CN&u=http://www.jianshu.com/p/262f6e34a7d3&prev=search.

Bu sayfa bu re - https://github.com/DreamTravelingLight/searchBarDemo - Bu demo projesine, ebat boyutlandırma sorunu yaşamadan bir arama motoru olmak için eski yolun nasıl kullanılacağını gösterir.

anahtar çizgilerdir bunlar bir görünüm içinde UISearchBar gömmek ve wrapView titleView olarak, UISearchBar bunun için ayarlanmış boyutuna sahip olacak ve gezinme çubuğunu uyacak ayarlarsanız

_searchBar = [self addSearchBarWithFrame:CGRectMake(0, 0, kScreenWidth - 2 * 44 - 2 * 15, 44)]; 
UIView *wrapView = [[UIView alloc] initWithFrame:_searchBar.frame]; 
[wrapView addSubview:_searchBar]; 
self.navigationItem.titleView = wrapView; 

amaçlandığı gibi.

sayesinde David

Sen yüksekliği 44 bir sınırlama ekleyerek iOS 11'de UISearchBar yüksekliğini değiştirebilir
+0

Neden kScreenWidth - 2 * 44 - 2 * 15? –

13

: Bu bana yardımcı

if #available(iOS 11.0, *) { 
    searchBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true 
} 
+0

Bu, üst ve alt çerçeveyi kısaltır. Bu hedef-c çözümünü denedim: [[self.notesSearchBar.heightAnchor consEkalToConstant: 44.0] setActive: YES], ama bu çözümü sevmiyorum çünkü üstteki alt marjı daha ince ve garip hale getiriyor. – coolcool1994

+0

Bu benim için çalıştı. Arama çubuğumun doğru düzeni koruyarak yeniden konumlandırır. –

+0

Bu özellikle doğru bir çözümdür, özellikle de iOS 10 ve iOS 11'i uygulamanızla birlikte hedefliyorsanız – Rushabh

1

:

if ([self.navigationItem respondsToSelector:@selector(setSearchController:)]) 
    { 
     [self.navigationItem performSelector:@selector(setSearchController:) withObject:self.searchController]; 
    } 
    else 
    { 
     self.tableView.tableHeaderView = self.searchController.searchBar; 
    } 
İlgili konular