4

UIRefreshControlsearchController APIと一緒にテーブルビューでnavigationItemに使用しようとしています。
hidesSearchBarWhenScrollingを設定すると、「リフレッシュするプルダウン」アニメーションが表示されなくなり、リフレッシュコントロールが特定のポイントでポップアップします。iOS 11 UISearchControllerがUIRefreshControlのナビゲーションバーでレイアウトグリッチを発生する

enter image description here

UIKitのバグ(毎年のように...同じ手順)であるように思われます。 誰でもこのソリューションを見つけましたか?問題は、新鮮なiOSの11「マスター/ディテール」サンプルプロジェクトにこれを追加し再現する

- (void)viewDidLoad { 
    // [setup code here] 

    self.refreshControl = [UIRefreshControl new]; 
    self.navigationItem.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
    self.navigationItem.hidesSearchBarWhenScrolling = NO; // <-- setting this causes jumpy UI 
} 

答えて

0

私はちょうど同じ問題を経験しました。間違いなくUIKitのバグのようです。それは間違いなく何かfiling a radarが価値があるだろう。

でも、私はそれを軽減するために非常にハック方法を見つけた:基本的に何がここで起こって

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    //Fixes a bug in UIKit where the refresh control is broken when `hidesSearchBarWhenScrolling` is NO. 
    if (@available(iOS 11.0, *)) { 
     self.navigationItem.hidesSearchBarWhenScrolling = scrollView.contentOffset.y < -scrollView.adjustedContentInset.top; 
    } 
} 

は、このコードのビット、(リフレッシュ制御が見えるようになります場所)トップ過去たびスクロールビューがスクロールしていることですhidesSearchBarWhenScrollingYESに戻ります。ユーザーが再び下にスクロールすると、NOに設定され、検索バーは引き続き表示されます。

Appleがこれを将来のiOSバージョンで修正することを願っていますが、現在の出荷バージョンでは、おそらくこれが必要です。

関連する問題