2017-09-19 39 views
9

पर स्टेटस बार के साथ खोज बार ओवरलैप मैं खोज कार्यक्षमता को लागू करने के लिए एक यूआईएसearchController और UISearchResultsController का उपयोग कर रहा हूं।आईओएस 11

MySearchResultsController लागू करता UISearchResultsUpdating और UISearchBarDelegate:

override open func viewDidLoad() { 
    super.viewDidLoad() 
    self.edgesForExtendedLayout = []; 
    self.automaticallyAdjustsScrollViewInsets = false; 
} 

मैं MyTableViewController में इस तरह tableHeader में searchbar प्रदर्शित:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController]; 
    self.searchController.searchResultsUpdater = self.searchResultsController; 
    self.searchController.searchBar.delegate = self.searchResultsController; 
    self.searchController.searchBar.scopeButtonTitles = @[NSLocalizedString(@"SEARCH_SCOPE_TEMPERATURES", nil), NSLocalizedString(@"SEARCH_SCOPE_KNOWHOW", nil)]; 
    self.tableView.tableHeaderView = self.searchController.searchBar; 
    self.definesPresentationContext = YES; 
} 

इस से पहले पूरी तरह से काम किया, लेकिन आईओएस 11 के तहत खोज पट्टी के साथ ओवरलैप हो स्टेटस बार जैसे ही मैं इसे टैप करता हूं (स्क्रीनशॉट देखें)। मैंने इसे सही तरीके से प्रदर्शित करने के लिए कई अलग-अलग चीजों की कोशिश की लेकिन अभी तक कोई समाधान नहीं मिला है।

enter image description here

+0

मुझे अभी पता चला है कि यह तब नहीं होता जब मैं स्कोप बटन शीर्षक (जिसे मैं नहीं करना चाहता ...) – Stefan

उत्तर

2

मैंने पाया समस्या यह है कि पेश दृश्य नियंत्रक भी सेट

override open func viewDidLoad() { 
    super.viewDidLoad() 
    self.edgesForExtendedLayout = []; 
    self.automaticallyAdjustsScrollViewInsets = false; 
} 

था कि मैं यह करने के लिए है, क्योंकि तालिका दृश्य वास्तव में शीर्ष करने के लिए सभी तरह से विस्तार नहीं करता है ।

मुझे लगता है कि मेरी पेश दृश्य नियंत्रक में इस तरह हल:

override open func viewDidLoad() { 
    super.viewDidLoad() 
    self.automaticallyAdjustsScrollViewInsets = false; 
    if (@available(iOS 11.0, *)) { 
     //NSLog(@"iOS 11.0"); 
    } else { 
     self.edgesForExtendedLayout = UIRectEdgeNone; 
     //NSLog(@"iOS < 11.0"); 
    } 
} 

एक iOS 11 बग, या कम से कम एक अजीब व्यवहार होने के लिए लगता है ...

+0

यह निश्चित रूप से एक बग है, हालांकि मुझे लगता है कि मुझे समर्थक नहीं है उत्तर में दिए गए बयान के अनुसार सही के रूप में चिह्नित किया गया है। बस असाइनमेंट स्टेटमेंट को जोड़कर सभी परिस्थितियों को ठीक किया गया जहां बग हो रहा था (8.2 से 10.3.1 के सभी संस्करण) और ऐसी स्थितियों में बदलाव नहीं किया जहां चीजें ठीक दिख रही थीं (11.0 के बाद और बाद में संस्करण)। – Alyoshak

0

मैं UISearchController उपवर्गीकरण द्वारा इस का समाधान करने में कामयाब रहे। मेरा जवाब स्विफ्ट में है लेकिन शायद सिद्धांत ओजेक्टिव-सी के साथ भी काम करता है। कृपया मेरा उत्तर यहाँ देखें: https://stackoverflow.com/a/46339336/8639272

1

यह वही मेरे लिए काम किया है:

override func viewDidLoad() { 
     // to fix the Status Bar Issue: 
     if #available(iOS 11.0, *) { 
      definesPresentationContext = true 
     } 
     // You'll also need this properties on your Search Bar: 
     searchController = UISearchController.init(searchResultsController: nil) 
     searchController?.searchResultsUpdater = self 
     searchController?.hidesNavigationBarDuringPresentation = false 
    } 
+1

बहुत बहुत धन्यवाद! searchController? hidesNavigationBarDuringPresentation वह है जो मैं ढूंढ रहा था! –

+0

नेविगेशन बार छुपाएं खोज बार की सुरुचिपूर्ण स्थानांतरण एनीमेशन को रोकता है। इससे ओवरलैपिंग समस्या हल हो सकती है क्योंकि एनीमेशन को और स्थानांतरित नहीं किया जा रहा है, लेकिन ऐसा नहीं हो सकता है कि हर कोई क्या चाहता है। मैं व्यक्तिगत रूप से स्थानांतरण एनीमेशन पसंद करता हूं लेकिन आईओएस 11 में इस बग के लिए। –

संबंधित मुद्दे