IOS 7 में UINavigationBar को शीर्ष पर देखने से कैसे रोका जाए?


99

Xcode 5 को अपडेट करने के बाद, मेरे सभी ऐप के विचारों में नेविगेशन बार नीचे स्थानांतरित हो गए हैं। यहाँ कुछ स्क्रीनशॉट हैं, पहला दृश्य में सब कुछ दिखा रहा है क्योंकि यह नीचे खींचा गया है, और दूसरा यह सब अछूता दिखा रहा है। खोज पट्टी को वहीं शुरू करना चाहिए जहां नेविगेशन बार है।

सभी सामग्री आइडल पर सभी सामग्री

क्या कोई व्यक्ति जानता है कि इसे कैसे ठीक किया जाए?

संपादित करें: मैंने यह पहले की सिफारिश की कोशिश की है:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

लेकिन यह बहुत ही अजीब परिणाम देता है।

समाधान का प्रयास

ऐसा इसलिए हो सकता है क्योंकि मेरे पास इस व्यू कंट्रोलर के नीचे एक "स्लाइड मेनू" है जो नेविगेशन बार की पारदर्शिता के कारण दिखाई दे रहा है।


यहाँ आप इस मुद्दे के लिए एक और समाधान कर रहे हैं। stackoverflow.com/a/51491645/10148333
Afonso

जवाबों:


235

नेविगेशन बार की पारदर्शी संपत्ति को NO पर सेट करें :

self.navigationController.navigationBar.translucent = NO;

यह नेविगेशन बार और स्टेटस बार के नीचे फंसाए जाने से दृश्य को ठीक करेगा।

यदि आपको नेविगेशन बार दिखाना और छिपाना है, तो उपयोग करें

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific

आपकी viewDidLoadविधि में।


1
मैंने इसे रखा है viewDidLoadलेकिन इसमें कोई बदलाव नहीं आया है।
सैम डी 20

13
इसे देखने के लिए बनाएंडायलटाउटस्यूब्स फंटेशन
हिंदू

1
इसे देखने के लिए इसे देखने के लिएडायलैटब्यूस ने ट्रिक को किया। मैं मदद सज्जनों की सराहना करता हूं!
सैम डी 20

हाय, कोई सवाल? या यह तारीफ है?
हिंदू

1
self.edgesForExtendedLayout = UIRectEdgeNone; मेरी मदद की
luky

32

में iOS 7चूक से सभी नियंत्रक पारदर्शी संपत्ति के मूल्य हाँ तो तुम कोई पारदर्शी गुण सेट है, इस समस्या के लिए।

self.navController.navigationBar.translucent = NO;

2
कोई "नावकंट्रोलर" संपत्ति नहीं है। इसका उपयोग करें: self.navigationController.navigationBar.translucent = NO;
जीन जेड रागन

मैं एप्लिकेशन डेलिगेट में नेवीगेंबरबंट्रोलर ऑब्जेक्ट बनाता हूं और नाम नवकंट्रोलर देता हूं।
सुमित मुंद्रा

21

आप इस स्क्रीन के व्यू कंट्रोलर के निरीक्षक में "किनारों को बढ़ाएं" को निष्क्रिय कर सकते हैं (जैसा कि नीचे दी गई छवि में दिखाया गया है):

यहां छवि विवरण दर्ज करें


12

यह स्विफ्ट के साथ-साथ iOS 8.1 पर भी काम करता है

navigationController?.navigationBar.translucent = false

8

यदि आप अपने navigationBarअंत में viewDidLoadया अपने viewWillAppearकोड की इस पंक्ति को जोड़ना चाहते हैं, तो आप पर पारभासी रखना चाहते हैं :

[self.view sendSubviewToBack:self.tableView]

किसी तरह यदि आपका scrollViewउपवर्ग ( UITableView, UICollectionViewआदि) indexआपके वर्तमान दृश्य में 0 पर है subviews, तो यह स्वचालित रूप से आपके अनुसार इनसेट्स को समायोजित करेगा navigationBar। और यह iOS7 से पहले के संस्करणों में आपके UI को प्रभावित नहीं करना चाहिए।


संपादित करें यदि आप अपने UITableViewप्रोग्राम को इनिशियलाइज़ करते हैं , तो इसका उपयोग करके इसे व्यू में जोड़ना सबसे अच्छा है[self.view insertSubview:self.tableView atIndex:0];


यह सही उत्तर होना चाहिए। यदि आप सबव्यू प्रोग्राम जोड़ रहे हैं, तो आप इसे जोड़ने के [self.view insertSubview:self.tableView atIndex:0];बाद इसे वापस भेजने के बजाय बस कर सकते हैं।
smitt04

सही बात। लेकिन बिना यह जाने कि वह अपने नियंत्रक (प्रोग्रामेटिकली, इंटरफ़ेस बिल्डर) को कैसे शुरू कर रहा है, हम यह नहीं मान सकते कि यह सबसे अच्छा समाधान है। हालाँकि मैंने अपना उत्तर संपादित कर लिया है।
jbouaziz

यह काम करता है लेकिन हैक की तरह दिखता है। क्या इस बारे में आधिकारिक दस्तावेज में कोई सूचना है?
जॉन ट्रैसीड


3

आप इस URL पर दिखाए अनुसार इस विधि को अपने दृश्य नियंत्रक में जोड़ सकते हैं :

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame = 
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}

2

एक अन्य दृष्टिकोण self.automaticallyAdjustsScrollViewInsets = YES;आपके दृश्य नियंत्रक पर सेट करना है। यह डिफ़ॉल्ट रूप से सक्षम है। लेकिन आपके मामले में:

मैं देख रहा हूँ कि आप EGORefreshHeaderView का उपयोग कर रहे हैं। यह UITableView की सामग्री के साथ खेलता है। इसलिए जब आप इसे जारी करते हैं, तो हेडर पिछले मूल्य को पुनर्स्थापित करने के बजाय शीर्ष इनसेट को रीसेट करेगा।


-1

यदि आप विचारों पर पूर्ण नियंत्रण रखना चाहते हैं और iOS के दोषपूर्ण समायोजन से बचना चाहते हैं, तो UITableView और इनसेट्स (स्क्रॉल और संकेतक दोनों) को समायोजित करें - (शून्य) willMoveToWindow: (UIWindow) * newWindow। मेरे लिये कार्य करता है।


-4

एक अन्य विकल्प स्रोत कोड मोड में अपनी Info.plist फाइल को खोलना और निम्नलिखित जानकारी दर्ज करना है:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>

उम्मीद है की यह मदद करेगा।


1
मुझे नहीं लगता कि इससे दृश्य बिल्कुल प्रभावित होगा।
एनरिको सुसताओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.