IOS 7 और iOS 6 के साथ Xcode 6 अनुकूली UI कैसे पीछे की ओर संगत हो सकता है?


137

मैंने सिर्फ WWDC के वीडियो # 216 को देखा, "UIKit के साथ एडेप्टिव UI का निर्माण।"

नए बदलावों का समर्थन करने के लिए लगभग 45:10 टोनी रिकियार्डी ने Xcode 6 में IB के परिवर्तनों के बारे में बात की।

वह कहता है "आप इन दस्तावेज़ों को पीछे के iOS के पुराने संस्करणों में तैनात कर सकते हैं"।

(जहां "इन दस्तावेजों" का अर्थ है निश्चित रूप से XIB और स्टोरीबोर्ड हैं जिनके पास विभिन्न आकार वर्गों के लिए विशिष्ट सेटिंग्स हैं।)

मैं इसे नहीं बना रहा हूं। डब्ल्यूडब्ल्यूडीसी वीडियो देखें।

वो कैसे संभव है? विशेषता संग्रह और आकार वर्ग केवल iOS 8 में परिभाषित किए गए हैं। रनटाइम व्यवहार कैसे UI निर्माण पर निर्भर है जो iOS 8 में नए हैं जो पिछले iOS संस्करणों में काम करते हैं?

यदि यह है संभव है कि यह अद्भुत होगा। आप ऐसे ऐप बना सकते हैं जो iOS 6, 7, और 8 पर चलेंगे, और नए लचीले यूआई लेआउट क्षमताओं का लाभ लेंगे जो Apple ने Xcode 6 में जोड़े हैं। मैंने कोड में अनुकूली यूआई लॉजिक खुद बनाया है, और यह काफी हद तक सही है काम की।


2
Apple का अब एक दस्तावेज भी है जो संस्करणों के साथ संगतता का वर्णन करता है <8
Alladinian

जवाबों:


151

इंटरफ़ेस बिल्डर में आकार वर्गों के साथ यूआई के लिए किए गए परिवर्तन iOS 7 उपकरणों और Xcode में पूर्वावलोकन पर सही ढंग से दिखाई देते हैं। उदाहरण के लिए, मैंने कुछ ऑटो लेआउट बाधाओं और फ़ॉन्ट आकारों को नियमित ऊंचाई के लिए नियमित रूप से चौड़ाई में बदल दिया और उन बदली हुई बाधाओं को आईओएस 7.0 चलाने वाले आईपैड सिम्युलेटर में दिखाई दे रहे हैं।

सभी आकार वर्ग अनुकूलन को iOS 7 के लिए उपलब्ध कराया गया है, सिवाय इसके कि आकार की कक्षाएं जो एक कॉम्पैक्ट ऊँचाई हैं। यह Apple द्वारा पुष्टि की गई है और अब सीधे प्रलेखन में कहा गया है :

IOS 8 से पहले iOS के संस्करणों का समर्थन करने वाले ऐप्स के लिए, अधिकांश आकार वर्ग पिछड़े संगत हैं।

जब आकार वर्ग पिछड़े संगत होते हैं:
- एप्लिकेशन को Xcode संस्करण 6 या बाद के संस्करण का उपयोग करके बनाया गया है - एप्लिकेशन
की तैनाती लक्ष्य iOS 8 से पहले है
- आकार की कक्षाएं स्टोरीबोर्ड या xib में निर्दिष्ट हैं
- ऊंचाई घटक का मूल्य कॉम्पैक्ट नहीं है

क्योंकि iOS 7 कुछ आकार वर्गों का सम्मान नहीं करता है, यदि आप उनका उपयोग करते हैं तो आप मुद्दों में भाग लेंगे। उदाहरण के लिए: जब आपके पास कॉम्पैक्ट डब्ल्यू कोई भी एच परिभाषित है और फिर आईओएस 7 पर कॉम्पैक्ट डब्ल्यू कॉम्पैक्ट एच परिभाषित किया गया है, तो यह कॉम्पैक्ट डब्ल्यू किसी भी एच का सम्मान करेगा लेकिन आईओएस 8 पर यह कॉम्पैक्ट डब्ल्यू कॉम्पैक्ट एच उपस्थिति का प्रतिपादन करता है।

इसलिए, यदि आप उन दो आकार वर्गों का उपयोग करना चाहते हैं और iOS 7 के साथ संगतता बनाए रखना चाहते हैं, तो मैं किसी भी w या किसी भी h या कॉम्पैक्ट w किसी भी परिदृश्य में iPhone के लिए आपकी इच्छा के अनुरूप कोई अनुकूलन करूँगा, फिर विभिन्न आकार वर्गों के लिए आपके अन्य अनुकूलन करूँगा। आवश्यक के रूप में, और इस तरह आपको कॉम्पैक्ट ऊंचाई के साथ किसी भी आकार वर्ग का उपयोग करने की आवश्यकता नहीं होगी और मुद्दों में चलने से बचना होगा।


मैं पुष्टि कर सकता हूं कि बीटा 4 में, कॉम्पैक्ट / कॉम्पैक्ट आकार वर्ग को सिम्युलेटर में या आईओएस 7 डिवाइस पर सम्मानित नहीं किया गया है। दिलचस्प है कि कुछ आकार वर्गों का सम्मान किया जाता है। परीक्षण के लिए धन्यवाद।
रिमाह

एक डिवाइस पर नियमित रूप से के लिए परीक्षण / नियमित और यह नहीं नहीं आकार वर्ग अनुकूलन का जवाब दे सकते हैं, सभी मैं किसी भी / किसी भी बीटा 7 के साथ है करता है
hokiewalrus

@hokiewalrus मैंने अभी Xcode 6 बीटा 7 के साथ जाँच की और उत्तर में मेरे द्वारा बताए गए सटीक परिणाम प्राप्त किए। रेगुलर रेगुलर के लिए IB में बॉक्स की चौड़ाई को बदलना iOS 7.1 पर चलने वाले iPad पर सही ढंग से दिखाई देता है।
जॉर्डन एच।

3
@ यह कोई बग नहीं है; यह जानबूझकर है। Compact-CompactiOS 7 के लिए निर्यात नहीं किया जाता है; Compact-Regularहै। अधिक जानकारी के लिए मेरा जवाब देखें।
डेव डोंगलांग

2
स्वीकृत उत्तर होना चाहिए, ऊपर दिया गया उत्तर भ्रामक है।
डोमिनिक लैकलेल

68

IOS 7 में अपने ऐप को तैनात करते समय, Xcode आपके स्टोरीबोर्ड को दो अलग-अलग तरीकों से संकलित करेगा:

  • IPhone के लिए, आपका स्टोरीबोर्ड "कॉम्पैक्ट-रेगुलर" (कॉम्पैक्ट चौड़ाई, नियमित ऊंचाई) के रूप में संकलित हो जाता है, और यह आपके "~ iphone" नीब के रूप में पैक हो जाता है।

  • IPad के लिए, आपका स्टोरीबोर्ड "नियमित-नियमित" के रूप में संकलित हो जाता है और आपके "~ ipad" nib के रूप में पैक हो जाता है।

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


आपके जवाब के बारे में मेरी समझ यह है कि "रेगुलर-रेगुलर" आईपैड iOS7 में काम करना चाहिए। लेकिन यह काम नहीं कर रहा है। मैंने XCode6 GM रिलीज़ में परीक्षण किया है। कृपया मुझे सही करें यदि मैंने आपके उत्तर की गलत व्याख्या की थी।
Iducool

4
ऐसा लगता है कि नियमित-नियमित केवल स्टोरीबोर्ड पर काम करते हैं, न कि xib
बोरिस चारपेंटियर

@ बोरिसचार्पियरियर मैंने उस rdar के बारे में एक बग की सूचना दी है : // 18737656 , जो कि खुले # 18490866 के डुप्लिकेट के रूप में बंद कर दिया गया था
मैक्सिम पावलोव

@BorisCharpentier क्या आपको xib का कोई हल मिला?
सादनीब

4
@BorisCharpentier, मैंने अभी पाया कि इस मुद्दे को XCode 6.1.1 :-) में हल किया गया है
saadnib

27

नोट: यह उत्तर Xcode 6 के बीटा संस्करण के लिए प्रासंगिक था और अब शिपिंग संस्करण के लिए लागू नहीं है। उचित जानकारी के लिए इस पृष्ठ पर जॉय और डेव डोंग द्वारा उत्तर देखें ।

(मूल उत्तर नीचे रखा गया है):


जबकि Storyboards/XIBsआकार वर्गों का उपयोग करने पर चलेगा कॉन्फ़िगर किया गया iOS 7, ओएस वर्तमान में उन सम्मान नहीं करता हैsize classes डिफ़ॉल्ट 'किसी भी / किसी भी' आकार वर्ग का उपयोग करने और दिखाई देता है।

मैं मानता हूं कि ऐसी संगतता का वादा करने के लिए आप जिस विशेष स्लाइड का उल्लेख कर रहे हैं, लेकिन वर्तमान में ऐसा प्रतीत नहीं होता है (Xcode 6 beta 2)

परीक्षण करने के लिए, मैंने (iOS 8 SDK, deployment target of 7.1)एक एकल बटन के साथ एक परियोजना बनाई जो कि vertically and horizontallyकिसी भी / किसी भी आकार वर्ग में केंद्रित है, लेकिन कॉम्पैक्ट / कॉम्पैक्ट आकार वर्ग (जैसे परिदृश्य में iPhone) में शीर्ष बाएं कोने से जुड़ा हुआ है। Xcode का पूर्वावलोकन सहायक दिखाता है कि बटन अपनी स्थिति को बदलता है iOS 8, लेकिन नहीं iOS 7। मैंने एक iOS 7डिवाइस पर इस व्यवहार की पुष्टि की ।


रॉय, जवाब देने के लिए धन्यवाद। मेरे पास खुद को परखने के लिए अभी तक समय नहीं है, और मैं इसकी सराहना करता हूं। उस वीडियो में प्रस्तुतकर्ता स्पष्ट होना चाहिए था। मुझे लगता है कि उनका मतलब यह रहा होगा कि XIB / स्टोरीबोर्ड फ़ाइलों को iOS 6 और 7 द्वारा पढ़ा जा सकता है, लेकिन अनुकूली UI के लिए समर्थन के बिना। यह iOS <8 समस्याग्रस्त पर चलने वाले ऐप्स के लिए कोडिंग करता है।
डंकन सी

वास्तव में। मुझे आश्चर्य है कि नए स्टोरीज़ वर्गों और पुराने स्टोरीबोर्ड / एक्सआईबी में पुराने अभिविन्यास / मुहावरे दृष्टिकोण का समर्थन करने के बारे में कोई आधिकारिक दस्तावेज है या नहीं। अगर मुझे कुछ मिला तो मैं जवाब को अपडेट करूंगा।
रेमना

मेरे अनुभव में, Apple को लगता है कि पुराने OS संस्करण नए संस्करण की घोषणा करते ही अस्तित्व में आ जाते हैं। वास्तव में, इंजीनियरिंग टीम ने जारी होते ही एक नए OS संस्करण पर ध्यान देना बंद कर दिया, और अगले प्रमुख संस्करण पर अपनी सभी ऊर्जाओं को केंद्रित करना शुरू कर दिया। मेरे पास एक बग नहीं है जिसे मैंने वर्तमान प्रमुख रिलीज में तय किया था। वे
डंकन सी

3
यह अब Xcode 6 बीटा 4 के मामले में प्रतीत नहीं होता है। मैंने अभी जो उत्तर दिया है, उसे देखें।
जॉर्डन एच

1
@ जॉय सर के लिए धन्यवाद; मैंने पाठकों को आपके उत्तर के साथ-साथ डेव के संदर्भ में अपना उत्तर संपादित किया है।
21

12

जैसा कि कुछ उत्तरों और टिप्पणियों में पीछे-संगतता की प्रकृति पर चर्चा की गई थी, मुझे लगा कि मैं Apple प्रलेखन से प्रत्यक्ष अंश साझा करूंगा :

~~~~~

पहले iOS संस्करणों पर आकार वर्गों के साथ एक ऐप की तैनाती

IOS 8 से पहले iOS के संस्करणों का समर्थन करने वाले ऐप्स के लिए, अधिकांश आकार वर्ग पिछड़े संगत हैं।

आकार वर्ग पिछड़े संगत हैं जब:

  • ऐप को Xcode वर्जन 6 या उसके बाद के वर्जन में बनाया गया है
  • ऐप का तैनाती लक्ष्य iOS 8 से पहले है
  • आकार की कक्षाएं स्टोरीबोर्ड या xib में निर्दिष्ट हैं
  • ऊंचाई घटक का मूल्य कॉम्पैक्ट नहीं है

~~~~~

इस चर्चा में अंतिम बुलेट बिंदु को लक्षित किया गया है, जहाँ Apple पुष्टि करता है कि जब तक "कॉम्पैक्ट ऊंचाई" का उपयोग नहीं किया जाता है , तब तक इसे पीछे की ओर-संगतता बनाए रखना चाहिए।

आशा है कि यह किसी की मदद करता है!


यह बहुत अच्छा है अब यह प्रलेखित है, पोस्ट करने के लिए धन्यवाद!
जॉर्डन एच

3

इसी तरह के मुद्दे से निपटने के दौरान मुझे एक और जवाब मिला कि मैंने अभी तक यहां नहीं देखा है। XIBफ़ाइलों में आकार वर्ग की तरह काम नहीं कर रहे हैं। यदि मैं उस storyboardफ़ाइल में सेल प्रोटोटाइप बनाता हूं जो iOS7 में काम करता है जैसा कि अन्य उत्तरों में बताया गया है, हालांकि जब एक ही प्रोटोटाइप सेल अलग हो जाता हैXIB फ़ाइल - iOS7 में आकार की कक्षाओं को अनदेखा किया जाता है।

इस व्यवहार को प्रदर्शित करने वाली नमूना परियोजना का लिंक यहां दिया गया है: https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip

प्रोटोटाइप सेल में मेरे पास ग्रे व्यू के प्रत्येक किनारे से चार अवरोध हैं। प्रत्येक को एक ही तरीके से कॉन्फ़िगर किया गया है: कोई भी / कोई भी - 10, नियमित / नियमित - 20

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

यह XIB और स्टोरीबोर्ड दोनों के लिए iOS8 सिम्युलेटर में ठीक काम करता है, और iOS7 में केवल Storyboard में परिभाषित कोशिकाओं को अपडेट किया गया है:

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


$ ^% $ ^% @ # ^ & @ #% & ^% ... और यहाँ मैं बहुत सारी xib फ़ाइलों के साथ हूँ और iOS 7 और 8 पर तैनात हूँ
TheEye

बिल्कुल सही। मैं iPhone और iPad स्टोरीबोर्ड को एक में जोड़ रहा था और सोचा था कि कोशिकाओं को अपनी XIB फ़ाइल में अलग करने से :) को मदद मिलेगी। यदि आप मेरे उत्तर को +1 कर सकते हैं तो मैं सराहना करूंगा।
शा।

1
मैं इसी व्यवहार को देख रहा हूं।
bjtitus

2

यदि यह किसी को भी समय बचाता है, तो मेरा मानना ​​है कि जिस तरह से Xcode 6 आकार वर्गों के लिए अर्ध-पश्चगामी संगतता प्रदान करता है वह ऐतिहासिक ~ipadऔर के माध्यम से है~iphone प्रत्यय स्टोरीबोर्ड के , और इससे अधिक कुछ नहीं। यह समझ में आता है क्योंकि आकार कक्षाएं पहले से ही एक iPad स्टोरीबोर्ड और एक iPhone स्टोरीबोर्ड को परिभाषित करने के तरीके का एक अधिक सार तरीका हैं।

इसलिए:

  • यदि आपका लक्ष्य डिवाइस परिवार विशिष्ट लेआउट (iPad बनाम iPhone) का समर्थन करने के लिए आकार की कक्षाओं का उपयोग करना है, तो आप भाग्य में हैं: आकार की कक्षाएं पहले से समर्थित विधि के लिए एक अच्छा इंटरफ़ेस हैं।

  • यदि आपका लक्ष्य एक ही डिवाइस परिवार के भीतर विभिन्न मॉडलों के लिए परिवर्तित लेआउट का समर्थन करने के लिए आकार की कक्षाओं का उपयोग करना है - अर्थात। iPhone 5/6/6 + inc। परिदृश्य, तो आप भाग्य से बाहर हैं । इनके उपयोग के लिए न्यूनतम iOS 8 परिनियोजन लक्ष्य की आवश्यकता होगी।


1

@lducool - आइडेंटिटी इंस्पेक्टर में इंटरफेस बिल्डर में, 'Buildds For' को iOS7.1 और बाद में बदलें।


आउटपुट में कोई अंतर नहीं।
Iducool

1

दुर्भाग्य से डेव और जॉय के जवाब मेरे काम नहीं आते। मुझे इस धागे में टिप्पणी करने की अनुमति नहीं है, इसलिए यदि यह गलत जगह है तो कृपया मुझे क्षमा करें।

मैंने इसके लिए एक विशिष्ट प्रश्न बनाया है: iPhone पोर्ट्रेट परिदृश्य अनुकूली UI के लिए उदाहरण जो iOS 7 के साथ पीछे की ओर संगत है

मैंने अब तक जो कुछ भी सीखा है, उससे अब मुझे विश्वास है कि, मेरे उदाहरण की तरह, आकार वर्गों के आधार पर iPhone iOS7 के साथ पोर्ट्रेट और लैंडस्केप मोड में एक ui तत्व के लिए 2 अलग, विभिन्न अवरोधों का होना संभव नहीं है। अगर मैं गलत हूँ, तो खुशी होगी।

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