8.0 से पहले iOS संस्करणों पर स्वचालित पसंदीदा मैक्स लेआउट चौड़ाई उपलब्ध नहीं है


322

मैंने Xcode6 Beta6 के साथ एक मौजूदा iOS प्रोजेक्ट खोला, और Xcode स्टोरीबोर्ड और Xib दोनों फाइलों के लिए निम्नलिखित चेतावनी सूचीबद्ध करता है:

8.0 से पहले iOS संस्करणों पर स्वचालित पसंदीदा मैक्स लेआउट चौड़ाई उपलब्ध नहीं है

मैंने नीचे की तरह चौड़ाई निर्धारित करके चेतावनी को संबोधित करने की कोशिश की:

फिर भी इसने चेतावनी का समाधान नहीं किया। उन्हें कैसे हटाया जा सकता है?


3
मैं XCode 6.1 का उपयोग कर रहा हूं और अपने सभी लेबल को पसंदीदा चौड़ाई = स्पष्ट में अपडेट कर रहा हूं। इससे मेरे लिए समस्या हल हो गई।
djburdick

जवाबों:


373

अद्यतन 3:
इस चेतावनी को उन लेबलों द्वारा भी ट्रिगर किया जा सकता है जो किसी numberOfLinesभी चीज़ पर सेट हैं लेकिन 1 यदि आपका परिनियोजन लक्ष्य 7.1 पर सेट है। यह नए सिंगल-व्यू प्रोजेक्ट के साथ पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य है।

प्रजनन करने कि प्रक्रिया:

  1. एक नया सिंगल-व्यू, ऑब्जेक्टिव-सी प्रोजेक्ट बनाएं
  2. परिनियोजन लक्ष्य को 7.1 पर सेट करें
  3. प्रोजेक्ट का स्टोरीबोर्ड खोलें
  4. दिए गए दृश्य नियंत्रक पर एक लेबल ड्रॉप करें
  5. उस लेबल पर 2 के लिए नंबरऑफलाइन सेट करें।
  6. संकलन

मैंने निम्नलिखित राडार दायर किया है:
rdar: // problem / 18700567

अपडेट 2:
दुर्भाग्य से, यह Xcode 6 के रिलीज़ संस्करण में फिर से एक बात है। ध्यान दें कि आप सबसे अधिक भाग के लिए, समस्या को ठीक करने के लिए अपने स्टोरीबोर्ड / xib को मैन्युअल रूप से संपादित कर सकते हैं। नीचे टिप्पणी में प्रति चार्ल्स ए :

यह ध्यान देने योग्य है कि आप बहुत आसानी से गलती से इस चेतावनी को पेश कर सकते हैं, और चेतावनी स्वयं उस लेबल को खोजने में मदद नहीं करती है जो अपराधी है। यह एक जटिल स्टोरीबोर्ड में दुर्भाग्यपूर्ण है। आप स्टोरीबोर्ड को एक स्रोत फ़ाइल के रूप में खोल सकते हैं और <label(?!.*preferredMaxLayoutWidth)एक पसंदीदाMaxLayoutWidth विशेषता / मान को छोड़ते हुए लेबल खोजने के लिए regex के साथ खोज कर सकते हैं । यदि आप इस तरह की तर्ज पर पसंदीदामेक्स लाईआउटवेट = "0" में जोड़ते हैं, तो यह स्पष्ट को चिह्नित करने और मान 0 को सेट करने के समान है।

अद्यतन 1:
यह बग अब Xcode 6 GM में तय किया गया है।

मूल उत्तर
यह Xcode6-Beta6 और XCode6-Beta7 में एक बग है और इसे अभी के लिए सुरक्षित रूप से अनदेखा किया जा सकता है।

Apple डेवलपर फ़ोरम में एक Apple इंजीनियर बग के बारे में कहने के लिए ऐसा था :

पसंदीदा अधिकतम लेआउट चौड़ाई यूआईबेल पर एक ऑटो लेआउट संपत्ति है जो इसे अपनी सामग्री को फिट करने के लिए स्वचालित रूप से लंबवत बढ़ने की अनुमति देती है। 6.0 से पहले के Xcode के संस्करण पसंदीदा समय पर मल्टीलाइन लेबल के लिए डिज़ाइन समय पर आकार सीमा के लिए पसंदीदामैक्सआउट को सेट करेंगे। यदि आपके क्षैतिज लेआउट में बदलाव हुआ है, तो आपको मैन्युअल रूप से अधिमानतः मैक्लैटआउट को अपडेट करना होगा।

iOS 8 ने रनटाइम के दौरान पसंदीदा मैकमैटाउटविथ को स्वचालित रूप से कंप्यूटिंग के लिए समर्थन जोड़ा, जो मल्टीलाइन लेबल को और भी आसान बनाता है। यह सेटिंग iOS 7 के साथ पीछे की ओर संगत नहीं है। iOS 7 और iOS 8 दोनों को सपोर्ट करने के लिए, Xcode 6 आपको आकार निरीक्षक में पसंद किए गएMaxLayoutWidth के लिए "स्वचालित" या "स्पष्ट" दोनों लेने की अनुमति देता है। तुम्हे करना चाहिए:

सर्वश्रेष्ठ अनुभव के लिए iOS 8 को लक्षित करते हुए "स्वचालित" चुनें। "IOS" को लक्षित करने पर "स्पष्ट करें" चुनें। फिर आप पसंदीदामैक्स लाईटाउट के मूल्य को दर्ज कर सकते हैं जो आप सेट करना चाहते हैं। जिस समय आपने बॉक्स को चेक किया था, उस समय सीमा के आकार के लिए "स्पष्ट" डिफॉल्ट को सक्षम करना।

चेतावनी दिखाई देगी यदि (1) आप ऑटो लेआउट का उपयोग कर रहे हैं, (2) "स्वचालित" एक बहुस्तरीय लेबल के लिए सेट है [आप इसे लेबल के आकार निरीक्षक में देख सकते हैं], और (3) अपने तैनाती लक्ष्य <iOS 8।

ऐसा लगता है कि बग यह है कि यह चेतावनी गैर-ऑटोलॉउट दस्तावेजों के लिए दिखाई देती है। यदि आप इस चेतावनी को देख रहे हैं और ऑटो लेआउट का उपयोग नहीं कर रहे हैं तो आप चेतावनी को अनदेखा कर सकते हैं।

वैकल्पिक रूप से, आप स्टोरीबोर्ड या जिब पर फ़ाइल इंस्पेक्टर का उपयोग करके समस्या के चारों ओर काम कर सकते हैं और "बिल्ड टू" के लिए "iOS 8.0 और बाद के लिए बिल्ड" को बदल सकते हैं। Xcode फ़ाइल इंस्पेक्टर


15
यह ध्यान देने योग्य है कि आप बहुत आसानी से गलती से इस चेतावनी को पेश कर सकते हैं, और चेतावनी स्वयं उस लेबल को खोजने में मदद नहीं करती है जो अपराधी है। यह एक जटिल स्टोरीबोर्ड में दुर्भाग्यपूर्ण है। आप स्टोरीबोर्ड को एक स्रोत फ़ाइल के रूप में खोल सकते हैं और <label(?!.*preferredMaxLayoutWidth)एक preferredMaxLayoutWidthविशेषता / मान को छोड़ने वाले लेबल को खोजने के लिए regex के साथ खोज कर सकते हैं । यदि आप preferredMaxLayoutWidth="0"ऐसी पंक्तियों को जोड़ते हैं, तो यह स्पष्ट रूप से चिह्नित करने और मान सेट करने के समान है 0
चार्ल्स ए।

6
क्या प्रोग्राम को यूआईलैब को स्वचालित रूप से समायोजित करने के लिए प्रोग्राममैक्स को स्वचालित रूप से समायोजित करने का कोई तरीका है, वास्तव में इसे उप-वर्ग के बिना या लेआउटसुब्यू में कहीं भी इसे लागू करने के बिना? यदि यह एक ऐसा व्यवहार है जिसे आईबी सक्षम कर सकता है, तो यह सुझाव देता है कि कोई संपत्ति या जादू मूल्य निर्धारित किया जा सकता है। लेकिन एपीआई डॉक्स या हेडर में कुछ भी ऐसा नहीं कहता है।
अल्गुल

2
@CharlesA। मैं एक खाली परियोजना के साथ परीक्षण कर रहा हूं और एक और लेबल विशेषता पाया गया है जो इस चेतावनी को ट्रिगर करेगा: यदि numberOfLinesकुछ भी करने के लिए सेट किया गया है, लेकिन 1, चेतावनी इस बात की परवाह किए बिना होगी कि आपने preferredMaxLayoutWidthसेट किया है या नहीं।
मेमों

2
@ MichaelG.Emmons अजीब बात है, मैं इसे एक साफ परियोजना और 7.1 पर सेट एक परिनियोजन लक्ष्य के साथ पुन: पेश नहीं कर सकता। एक बार जब मैं preferredMaxLayoutWidthएक स्पष्ट 0 पर सेट हो जाता हूं तो चेतावनी numberOfLinesमूल्य की परवाह किए बिना चली जाती है । लेकिन शायद यह आज सुबह एक्सकोड अपडेट में तय किया गया था?
चार्ल्स ए।

2
तो ... लाइनों की संख्या को 1 पर सेट करने और कोड से इसे बदलने का एकमात्र समाधान है? यह पेशेवर नहीं लगता है
जॉम्फर

315

एक बड़े स्टोरीबोर्ड में समस्या लेबल को खोजने के लिए, नीचे दिए गए मेरे चरणों का पालन करें।

  1. XCode के इश्यू नेविगेटर में त्रुटि पर राइट क्लिक करें और "लॉग इन का खुलासा करें" चुनें। (नोट: @Sam नीचे सुझाव देता है, xCode की रिपोर्ट नेविगेटर में देखें । इसके अलावा @Rivera ने टिप्पणी में लिखा है कि "Xcode 6.1.1 के रूप में, चेतावनी पर क्लिक करने से स्वचालित रूप से खुलेगा और परस्पर विरोधी लेबल को उजागर करेगा"। मैंने परीक्षण नहीं किया है। )।

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

  1. यह आपकी स्टोरीबोर्ड फ़ाइल के अंत में एक कोड के साथ त्रुटि दिखाएगा। .Storyboard के बाद मान की प्रतिलिपि बनाएँ

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

  1. अगला, अपने स्टोरीबोर्ड को स्रोत फ़ाइल के रूप में प्रकट करें। यहां छवि विवरण दर्ज करें

  2. खोज। आपको यह बताने में सक्षम होना चाहिए कि सामग्री को देखकर यह यहाँ से किस लेबल पर है। यहां छवि विवरण दर्ज करें

एक बार जब आप लेबल को हल कर लेते हैं जो मेरे लिए काम करता है तो "पसंदीदा चौड़ाई" को 0 पर सेट करना था।

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

BTW, आप हमेशा आइटम का चयन करके और पहचान निरीक्षक के तहत देखकर इंटरफ़ेस आइटम की आईडी प्राप्त कर सकते हैं। बेहद सुविधाजनक।

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


36
यह स्वीकृत उत्तर होना चाहिए! यह वास्तव में समस्या को हल करता है। यह स्टोरीबोर्ड में अन्य मुद्दों को खोजने में भी मदद करता है जो सामान्य रूप से दिखाई नहीं देते हैं। एक बात: मुझे पता है कि रिपोर्ट नेविगेटर "लॉग इन में लॉग इन करें" पर राइट-क्लिक करने से ज्यादा विश्वसनीय है
सैम स्पेंसर

1
इस जवाब को प्यार करो, बहुत सरल और चेतावनी को तय किया। बहुत बहुत धन्यवाद!
एथन पार्कर

1
धन्यवाद u soooo muchhhhhh :)
SR नायक

2
आप इंटरफ़ेस बिल्डर में दिखाए गए चौड़ाई के बजाय पसंदीदा चौड़ाई को शून्य पर क्यों सेट करते हैं?
बाइस्कोप्स

9
बहुत बढ़िया जवाब! आप स्टोरीबोर्ड के आईबी दृश्य से सीधे ऑब्जेक्ट आईडी के लिए खोज कर सकते हैं। बस एक Ctrl-f करें। स्रोत कोड के रूप में इसे खोलने की आवश्यकता नहीं है और फिर पसंदीदा चौड़ाई को बदलने के लिए आईबी दृश्य पर वापस स्विच करना होगा।
AndroidDev 20

36

आप स्रोत के रूप में स्टोरीबोर्ड को खोले बिना इस समस्या को ठीक कर सकते हैं । यह चेतावनी UILabels द्वारा ट्रिगर की जाती है अगर नंबरऑफलाइन! = 1 और तैनाती लक्ष्य <8.0 है

यह कैसे करें?

  1. इश्यू नेविगेटर (CMD + 8) पर जाएं और चेतावनी के साथ नवीनतम निर्मित चुनें यहां छवि विवरण दर्ज करें
  2. चेतावनी ढूंढें ( " स्वचालित पसंदीदा मैक्स लेआउट " के लिए खोज करें ) और दाईं ओर विस्तार बटन दबाएं
    यहां छवि विवरण दर्ज करें
  3. UILabel की ऑब्जेक्ट आईडी का पता लगाएंयहां छवि विवरण दर्ज करें
  4. ऑब्जेक्ट के लिए स्टोरीबोर्ड और SEARCH (CMD + f) खोलें । यह सिलेक्ट करेगा और यूलाइब को हाईलाइट करेगा
  5. निर्धारित चौड़ाई = 0 "स्पष्ट करें" जैसा कि अन्य ने सुझाया है

23

समाधान यह काफी सरल है

बस iOS 8 और बाद के लिए बिल्ड सक्षम करें

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


काफी सरल और विनाशकारी। IOS8 के केवल 85% यूजर्स iOS8 + developer.apple.com/support/app-store पर हैं
Aryaxt

6
@aryaxt मुझे खेद है कि आप गलत हैं। आप प्रोजेक्ट सेटिंग्स में iOS 7 या उससे कम करने के लिए परिनियोजन लक्ष्य सेट कर सकते हैं और IB दस्तावेज़ों में iOS 8 और बाद के संस्करणों को बदल सकते हैं और यह iOS 7 पर काम करेंगे। कृपया इसे सत्यापित करें और डाउनवोट हटा दें। आप इसे यहाँ देख सकते हैं। developer.apple.com/library/ios/recipes/…
एलेजांद्रो लुएंगो

1
हमेशा सबसे अच्छा जवाब के रूप में स्वीकार नहीं किया है ... :) चीयर्स!
HepaKKes

IOS9.3 और ऊपर के लिए अद्यतन: iOS7 डिवाइस अब उपरोक्त सेटिंग के साथ स्टोरीबोर्ड को प्रस्तुत नहीं करते हैं। यह 9.3 अपडेट से पहले काम करता था। लगता है कि Apple ने अपनी पूर्व-रिलीज़ स्वचालित प्रक्रिया में कुछ बदल दिया।
पीकर

4

अब मेरा Xcode वर्जन 6.1 है। लेकिन मुझे यह चेतावनी भी मिली। यह मुझे बहुत परेशान करता है। बार-बार खोज करने के बाद। मुझे इसका हल मिला।

कारण: आपने अपने स्टोरीबोर्ड में अपने यूआईबेल लाइन्स> 1 को सेट किया होगा।

समाधान: स्टोरीबोर्ड में अपनी यूआईबेल लाइन्स विशेषता को 1 पर सेट करें। अपना Xcode पुनः आरंभ करें। यह मेरे लिए काम करता है, आशा है कि यह अधिक लोगों की मदद कर सकता है।

यदि आपको वास्तव में अपने शब्दों को 1 पंक्ति से अधिक दिखाने की आवश्यकता है। आपको इसे कोड में करना चाहिए।

//the words will show in UILabel
NSString *testString = @"Today I wanna set the line to multiple lines. bla bla ......  Today I wanna set the line to multiple lines. bla bla ......"
[self.UserNameLabel setNumberOfLines:0];
self.UserNameLabel.lineBreakMode = NSLineBreakByWordWrapping;
UIFont *font = [UIFont systemFontOfSize:12];
//Here I set the Label max width to 200, height to 60
CGSize size = CGSizeMake(200, 60);
CGRect labelRect = [testString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName] context:nil];
self.UserNameLabel.frame = CGRectMake(self.UserNameLabel.frame.origin.x, self.UserNameLabel.frame.origin.y, labelRect.size.width, labelRect.size.height);
self.UserNameLabel.text = testString;

3
"यदि आपको वास्तव में अपने शब्दों को 1 पंक्ति से अधिक दिखाने की आवश्यकता है, तो आपको इसे कोड में करना चाहिए।" यह एक ट्रोल है, है ना?
वेबस्टार्क्स

@webstersx मुझे लगता है कि वह गंभीर है
जैस्पर

4

संक्षेप में, मेरे लिए ऊपर दिए गए दो निर्देशों का पालन करने के लिए, जहाँ किसी भी उदाहरण को बदलने के लिए जहां नंबरऑफलाइन = 0 से 1 या उससे अधिक हो, और मैन्युअल रूप से पसंदीदामेक्सलैटआउटविथ = "0" जोड़कर स्टोरीबोर्ड के अंदर एक लेबल के प्रत्येक उदाहरण में मेरी सभी चेतावनियाँ निर्धारित की जाएं।


यार आप एक अजीब हैं! उम्मीद के मुताबिक UIScrollerView के साथ भी काम करता है। अब तक का सबसे अच्छा समाधान क्योंकि मैं iOS7.0 पर अपने निब की तैनाती के लक्ष्य को छोड़ सकता हूं
यारो

3

चूंकि मेरे पास 50 प्रतिष्ठा नहीं है स्टैकओवरफ़्लो अभ्यस्त मुझे दूसरे सर्वश्रेष्ठ उत्तर पर टिप्पणी करने दें। स्टोरीबोर्ड में अपराधी लेबल को खोजने के लिए एक और चाल मिली।

एक बार जब आप लेबल की आईडी जान लेते हैं, तो अपने स्टोरीबोर्ड को एक अलग टैब में खोलें, जिसमें व्यू कंट्रोलर प्रदर्शित हों और केवल कमांड F और कमांड V को प्रदर्शित करें और आपको सीधे उस लेबल पर ले जाएगा :)


आप लेबल आईडी के लिए परियोजना में खोज का मतलब है।
बोरहज

2

W / H चयन में मेरे पास मूल लेआउट का चयन करके मुझे यह काम कर रहा था। स्टोरीबोर्ड अपेक्षा के अनुरूप काम कर रहा है और त्रुटि दूर हो गई है।

यह भी सुनिश्चित करें कि आप iOS 8.0 के लिए विकसित कर रहे हैं। जाँच करें कि परियोजना की सामान्य सेटिंग्स से।

यह वह जगह है जहाँ आपको प्रेस करना चाहिए।


1

मेरे पास यह मुद्दा था और एक लेबल के साथ अधिकतम निर्धारित करने के लिए बाधाओं को जोड़कर इसे ठीक करने में सक्षम था।

जब एक मल्टीलाइन लेबल को छोड़ना अभिभावक के दृष्टिकोण के अंदर की चौड़ाई को लागू करने के लिए निर्धारित बाधा नहीं है। यह वह जगह है जहाँ नया PreferredMaxWidth खेल में आता है। आईओएस 7 और इससे पहले आपको खुद को अधिकतम चौड़ाई को परिभाषित करना होगा। मैंने बस लेबल के बाएँ और दाएँ हाथ की ओर एक 10px अवरोध जोड़ा।

आप एक <= चौड़ाई की बाधा भी जोड़ सकते हैं जो समस्या को भी ठीक करता है।

तो यह वास्तव में एक बग नहीं है, आपको बस अधिकतम चौड़ाई को स्वयं परिभाषित करना होगा। अन्य उत्तर में उल्लिखित स्पष्ट विकल्प भी काम करेगा क्योंकि आप यह चौड़ाई मान सेट कर रहे हैं, हालाँकि आपको यह मान संशोधित करना होगा यदि आप मूल चौड़ाई के आधार पर अधिकतम चौड़ाई बदलना चाहते हैं (जैसा कि आपने स्पष्ट रूप से चौड़ाई निर्धारित की है)।

मेरे उपरोक्त समाधान से यह सुनिश्चित होता है कि चौड़ाई हमेशा बनी रहे, चाहे अभिभावक का दृष्टिकोण कितना भी बड़ा क्यों न हो।


1

किसी कारण से, भले ही iOS परिनियोजन लक्ष्य 8.0 या उच्चतर में बदल रहा है, Xib फाइलें उस बदलाव को नहीं अपनाती हैं और फ़ाइल इंस्पेक्टर में पिछली सेटिंग्स के साथ बनी रहती हैं

IOS तैनाती लक्ष्य को बदलने के बाद Xib में फाइल इंस्पेक्टर

इसलिए, आपको इसे प्रत्येक Xib के लिए मैन्युअल रूप से बदलना चाहिए मैन्युअल परिवर्तन को पूरा करें

एक बार किया, चेतावनी गायब हो जाएगा :-)

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