नई iOS7 SDK के साथ विचारों पर नेविगेशन बार दिखाई देता है


113
CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

पहले के संस्करणों में यह सही ढंग से काम कर रहा है। खोज बार statusbarनेविगेशन और बार के नीचे दिखाई दे रहा है । tableviewखोज बार के नीचे दिखाई दे रहा है

लेकिन जब मैं इसे चलाता हूं Xcode 5 sdk iOS 7, तो सर्च बार दिखाई नहीं देता है (मुझे लगता है कि इसे स्टेटस बार और नेविगेशन बार के नीचे रखा गया है), और साथ ही नेविगेशन बार टेबल व्यू पर दिखाई दे रहा है।

क्या इसके साथ तय किया जाएगा iOS 7 स्थिर रिलीज के ?

या यह मेरे कोडिंग की समस्या है?

या हमें इसके लिए y (y = statubar height + nav bar height)मान जोड़कर संभालना चाहिएiOS 7 ?

मैंने हाल ही में iOS 7 में अपने ऐप्स का परीक्षण करने के लिए Xcode 5 DP डाउनलोड किया है। पहली बात जिस पर मैंने गौर किया और पुष्टि की कि मेरे विचार की सीमा हमेशा स्टेटस बार और नेविगेशन बार के खाते में नहीं है।

ViewDidLayoutSubviews में, मैं दृश्य की सीमाएँ प्रिंट करता हूं:

{{0, 0}, {320, 568}}

इससे मेरा कंटेंट नेविगेशन बार और स्टेटस बार के नीचे दिखाई देता है।

मुझे पता है कि मैं मुख्य स्क्रीन की ऊँचाई प्राप्त करके, स्थिति बार की ऊँचाई और नेविगेशन बार की ऊँचाई को घटाकर ऊँचाई का हिसाब रख सकता हूँ, लेकिन यह अनावश्यक अतिरिक्त काम की तरह लगता है।

क्या किसी और ने इस समस्या को अनुभव किया है?

अपडेट करें:

मुझे इस विशिष्ट समस्या का हल मिल गया है। नेविगेशन बार की पारभासी संपत्ति को NO पर सेट करें:

self.navigationController.navigationBar.translucent = NO;

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

हालाँकि, मुझे उस मामले के लिए कोई फिक्स नहीं मिला है जब आप चाहते हैं कि नेविगेशन बार पारभासी हो। उदाहरण के लिए, एक तस्वीर को पूर्ण स्क्रीन पर देखने के बाद, मैं चाहता हूं कि नेविगेशन बार पारभासी हो, और इसके नीचे फ्रेम किए जाने का दृश्य। यह काम करता है, लेकिन जब मैं नेविगेशन बार को दिखा / छुपाता हूं, तो मुझे अजनबी परिणाम भी अनुभव होते हैं। पहला सबव्यू (ए UIScrollView) अपनी सीमा प्राप्त करता है वाई उत्पत्ति हर बार बदल जाती है।


4
बीटा सॉफ्टवेयर। Apple डेवलपर फ़ोरम अधिक उपयुक्त हैं। साथ ही, संक्रमण गाइड में समस्या का स्पष्ट रूप से उल्लेख किया गया है।
सुल्तान

जवाबों:


188

यह पूरी तरह सच नहीं है। IOS 7 में एक नई प्रॉपर्टी शुरू की गई है जो आपको लेआउट व्यवहार को iOS के पिछले संस्करणों में समायोजित करने की सुविधा देती है। इस कोड के टुकड़े को अपने व्यू कंट्रोलर में रखें, और आपको जाने के लिए अच्छा होना चाहिए! आपके नेविगेशन बार को जिस स्थान पर रखा जाता है, उसका हिसाब अपने आप होना चाहिए

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

आपको अपने में उपरोक्त जोड़ने की आवश्यकता है -(void)viewDidLoad विधि ।

नोट: आपको iOS 7 और Xcode 5 के नवीनतम GM रिलीज का उपयोग करना चाहिए क्योंकि एपीआई बीटा संस्करणों से बदल गया है।


मेरे कोड में यह किनारों को कहते हैं। अघोषित पहचानकर्ता का उपयोग UIExtendedEdgeNone। कृपया मदद कीजिए।

6
इसे UIRectEdgeNone में बदल दिया गया है
साइमन

6
यही कारण है कि इस तरह के सवाल को यहां नहीं पूछा जाना चाहिए या इसका जवाब नहीं दिया जाना चाहिए।
सुल्तान

मैं यह नहीं समझता कि अगर आप ios6 के साथ अनुकूलता रखना चाहते हैं, तो आपको यह जाँचने के लिए मजबूर किया जाना चाहिए कि कोड द्वारा एक सशर्त मामले की जाँच की जाए कि नियंत्रक के पास वह संपत्ति है या नहीं ..
jerrygdm

12
यह केवल तभी काम करता है जब दृश्य UINavigationController में एम्बेडेड हो।
पूजो

37

स्टोरीबोर्ड से स्क्रीनशॉट

यदि आप स्टोरीबोर्ड में काम कर रहे हैं (जो मैं दृढ़ता से सलाह देता हूं!) यह समाधान है: आप स्टोरीबोर्ड में अपने व्यू कॉन्ट्रोलर के "एक्सटेंशन बढ़ाएं" को अक्षम कर सकते हैं। आपको प्रत्येक दृश्य नियंत्रक के लिए ऐसा करना होगा। आप स्टॉर्टबोर्ड में व्यू कॉन्ट्रोलर आइकन पर क्लिक करके (स्वयं व्यू के नीचे productOwner के अलावा) और फिर इंस्पेक्टर इंस्पेक्टर का चयन कर सकते हैं (जैसे चित्र दिखाता है)।

यह भी iOS 6 की तरह अलाइनमेंट लाइनों को सेट करेगा।

XCode 5 में एक और महान उपकरण "पूर्वावलोकन" है: बटलर बटन (सहायक संपादक) पर क्लिक करें और पूर्वावलोकन का चयन करें। वहाँ आप iOS 6 का चयन कर सकते हैं और देख सकते हैं कि iOS पर आपका स्टोरीबोर्ड डिज़ाइन कैसा दिखेगा।

इसके बस महान: डी

[अपडेट करें]

सावधान रहें: "एक्सटेंशन का विस्तार करें" अक्षम करने से ऐप के iOS7 में बैकग्राउंड में प्रवेश करने पर नेविगेशन बार पर काली चमक आ सकती है। चमक मल्टीटास्किंग दृश्य (होम बटन पर डबल प्रेस) पर भी दिखाई देगी। यह नेविगेशन के बार दृश्य की पृष्ठभूमि का रंग सफेद पर सेट करके हल किया जा सकता है।

[self.navigationController.view setBackgroundColor:[UIColor whiteColor]];

हां, यह एक स्टोरीबोर्ड परिप्रेक्ष्य से इस पर आने वाला समाधान है। धन्यवाद।
jpittman

12

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

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


8

self.edgesForExtendedLayout=UIRectEdgeNone;

यह iOS 7 सिम्युलेटर (Xcode 5 DP5) पर काम करता है


2
यह ios7 में ठीक काम करता है, लेकिन अगर मैं ios 6 पर ऐप चलाता हूं और पहले फिर से विचारों को ऊपर ले जाया जाता है। इसके लिए कोई उपाय? इसके अलावा, हमें प्रत्येक दृश्य नियंत्रक दृश्य लोड विधि में इस संपत्ति को सेट करने की आवश्यकता है?
लोगानथन

आप हमेशा जाँच सकते हैं कि वर्तमान iOS 7 इसके साथ है अगर:if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
Aviel सकल

2

ये उत्तर सभी सहायक थे, विशेष रूप से MQoder, लेकिन मेरे लिए मुझे "अपारदर्शी काले नेविगेशन" के लिए डिफ़ॉल्ट शीर्ष बार भी सेट करना पड़ा।

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


1

@ एक आदमी चालक दल का उत्तर सही है, लेकिन:

पुराने संस्करणों पर ऐप चलाते समय त्रुटियों से बचने के लिए मैं इस कोड का उपयोग करने की सलाह दूंगा:

 #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;
 #endif

0

self.edgesForExtendedLayout = UIRectEdgeNone;

और आपको यह करने की आवश्यकता है AppDelegate # एप्लिकेशन: didFinishLaunchingWithOptions:

self.window.backgroundColor = [UIColor whiteColor];

अन्यथा नेविगेशन बार की पृष्ठभूमि का रंग ग्रे में बदल जाएगा। क्योंकि पारदर्शी नेविगेशन बार खिड़की को ओवरलैप करता है।


0

यदि आप उस पारदर्शिता को बनाए रखना चाहते हैं जब उपयोगकर्ता आपके तालिका दृश्य को स्क्रॉल करता है, तो आप इसकी सामग्री सेट कर सकते हैं:

CGFloat topLayoutGuide = self.topLayoutGuide.length + self.tabBarController.navigationController.navigationBar.frame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(topLayoutGuide, 0, 0, 0);

-1

नेविगेशन नियंत्रक का उपयोग करने के लिए एक समाधान है। इससे समस्या स्वतः हल हो जाती है। इसके अलावा Xcode पूर्वावलोकन संस्करणों के बजाय Xcode 5 का उपयोग करें क्योंकि वे बीटा वाले हैं।

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