Xcode - क्या इसके फ्रेम को खोए बिना किसी घटक को एक दृश्य से दूसरे में खींचने का एक तरीका है?


91

जो मैं करना चाहता हूं, उसके फ्रेम / स्थिति को रीसेट किए बिना Xcode के इंटरफ़ेस-बिल्डर में एक पर्यवेक्षक से दूसरे में एक घटक / दृश्य खींचें।

ऐसा करते समय Xcode का डिफ़ॉल्ट व्यवहार अपने आयामों को संरक्षित करते हुए दृश्य को अपने नए सुपरविज़न में लंबवत और क्षैतिज रूप से ले जाया जा रहा है। यह बेहद निराशाजनक है, क्योंकि इसका मतलब है कि इस दृश्य को अपने नए पर्यवेक्षण में मैन्युअल रूप से प्रतिस्थापित करने की आवश्यकता है। लेकिन मैंने इसे स्थानांतरित करने से पहले इसे सही ढंग से तैनात किया था, इसलिए मैं चाहूंगा कि Xcode को सिर्फ इसकी चौड़ाई / ऊंचाई के बजाय इसके फ्रेम की सभी विशेषताओं को याद रखें। क्या यह संभव है?


अतीत में समय पर, यदि आप फ्रेम को काटते हैं और चिपकाते हैं, तो वही रहता है। यह कोशिश करो और देखो।
डेविड एच।

सुझाव के लिए धन्यवाद, दुर्भाग्य से यह काम नहीं करता है। वरना मैं इसे गलत तरीके से काट / चिपका रहा हूँ। क्या होता है कि XCode उस दृश्य को प्रतिस्थापित करता है जिसे मैं चिपकाने वाले दृश्य के साथ पेस्ट करने की कोशिश कर रहा हूं (और अगर मैं एक साथ कई चीजों को चिपकाने की कोशिश करता हूं, तो यह सूची में पहले आइटम का उपयोग करता है)। नकल वही करता है।
अरोठ

सूची के बाईं ओर के कॉलम में इसे चिपकाने का प्रयास करें। सुपर दृश्य का चयन करें और फिर पेस्ट करें। अन्यथा, क्षमा करें, सुझावों से बाहर।
डेविड एच।

दोनों तरह से कोशिश की। काम नहीं करता है। यह कठिन रास्ता करने के लिए समाप्त हो गया।
एरोथ

वहाँ एक समाधान के हो रहा है stackoverflow.com/questions/12034293/... लेकिन यह बहुत अच्छा नहीं है
यूजीन Osovetsky

जवाबों:


223

एक और समाधान:

  1. अपने उप-क्रम में इच्छित आइटम का चयन करें, फिर
  2. (टूल बार में) संपादक> एम्बेड करें> देखने का प्रकार एम्बेड करने के लिए।

12
धन्यवाद। यह स्वीकृत उत्तर होना चाहिए। उन सभी दृश्यों का चयन करें, जिन्हें आप एक नए सुपर व्यू में ले जाना चाहते हैं -> देखने में एम्बेड करें -> नए कंटेनर व्यू को वांछित सुपर व्यू -> एडिटर - अनएम्बेड में ले जाएं। देखा! सभी दृश्य सही फ्रेम के साथ नए पर्यवेक्षण में हैं।
Accatyyc

18
बहुत बुरा किसी भी ऑटो लेआउट बाधाओं पर नकल नहीं मिलता है, एक ही रास्ता मैंने देखा है मैन्युअल रूप से xib के xml को संपादित करने के लिए है: indiestack.com/2013/12/transplanting-constraints
जेम्स

1
एक बात जो अभी भी अजीब है, जब मैं अपने नए सुपरवाइवे में अपने सब-इंवेस्टमेंट्स को एम्बेड करता हूं, तो सुपरवाइवे के पास अजीब निर्देशांक होते हैं। यह -20 x और -20 y से शुरू होता है, और फिर अगर मैंने इसे 0,0 पर सेट किया तो सब कुछ ऑफ-सेंटर है।
user3344977

1
@ जेम्स मैं ऐसा करता था। लेकिन मैंने पाया कि यदि आप Xcode 6 में कमांड- X_Command-V विचार देखते हैं, तो चिपकाया गया विचारों के बीच की बाधाओं का सम्मान किया जाता है। छोटा सुधार।
स्टीवन क्रेमर

4
@StevenKramer मैंने कमांड-एक्स और कमांड-वी के साथ कोशिश की, मेरे लिए काम नहीं किया। क्या आपके पास ऐसा करने के लिए और कदम हैं? मुझे दिलचस्पी है
अरह

28

मुझे कुछ ऐसा मिला जो आप लोगों की मदद कर सकता है!

कार्य "बच्चे के विचारों" को "माता-पिता के दृष्टिकोण" में फिर से संगठित करना है ताकि वे माता-पिता के बच्चों को पदानुक्रम से देखें और शारीरिक स्थिति को कार्रवाई से पहले बनाए रखें।

सबसे पहले, माता-पिता के दृष्टिकोण को शारीरिक रूप से बच्चे के विचारों के क्षेत्र को शामिल करें। दूसरा, सुनिश्चित करें कि सभी बच्चे इसे दृश्य सूची में शामिल कर रहे हैं।

अब माउस के साथ सभी बच्चों का चयन करें और उन्हें स्थानांतरित करें जैसे एक पिक्सेल ऊपर और एक पिक्सेल नीचे (बस आईबी को कुछ बदलाव कहना है)। उसके बाद बच्चों को रिहा करें और वे जादुई रूप से माता-पिता के बच्चे बन जाएंगे और अपनी स्थिति को बनाए रखेंगे।

यह मेरे लिए OSX 10.8.2 और Xcode 4.6 पर काम करता है।

सौभाग्य!


बहुत बढ़िया ... इससे आउटलेट और फ्रेम भी नहीं टूटते। व्यू ब्रेक फ्रेम में एम्बेड करें। कट पेस्ट विधि आउटलेट और फ़्रेम को तोड़ती है।
jeet.chanchawat

22

मैंने बहुत सारा समय बचाने के लिए सामान रखने में कामयाबी हासिल की और यह किया:

  1. इंटरफ़ेस बिल्डर में मूल दृश्य को उसी स्तर पर जोड़ सकते हैं जैसे कि साक्षात्कार हो सकते हैं।
  2. एक टेक्स्ट एडिटर में स्टोरीबोर्ड खोलें और पेरेंट व्यू के सबव्यू टैग्स के अंदर होने वाले साक्षात्कारों को कॉपी करें। इसे सहेजते ही XCode अपडेट होने वाला है।

हालांकि बहुत सुंदर नहीं है, यह नहीं देख सकता कि XCode शिफ्ट या कुछ और के साथ इसका समर्थन क्यों नहीं करता है।


3
यह एकमात्र उत्तर है जो लगातार मेरे लिए Xcode 5 में बिना किसी उपद्रव के काम करता है। "संपादक-> एंबेड इन" ऐसा लगता है कि यह सही उत्तर होना चाहिए लेकिन यह हमेशा उस दृश्य को सूचीबद्ध नहीं करता है जिसे मैं उप-विषयों पर ले जाना चाहता हूं।
Denton

10
  1. उन सभी नियंत्रणों का चयन करें जिन्हें आप एक UIView से दूसरे UiView (nay be child) या स्क्रॉलव्यू में ले जाना चाहते हैं

  2. कट कॉपी

  3. अब अपने मौजूदा UIVIV में नए UIView / स्क्रॉलव्यू को खींचने के बाद, इसे चुनने के लिए एक बार क्लिक न करें, इसके बजाय नए UIVIV / स्क्रॉल दृश्य पर क्लिक करें और सभी नियंत्रणों को पेस्ट करें।

  4. सभी नियंत्रणों के बीच दूरी का अंतर समान रहेगा, लेकिन आपको फिर से नियंत्रण को फिर से करना पड़ सकता है। तो कहीं भी क्लिक न करें जब तक कि आपने उन लोगों को रिप्रेजेंट नहीं किया है, सिर्फ नेविगेशन एरो द्वारा सभी कंट्रोल को रिपोज करें क्योंकि वे सभी पहले से ही चुने गए हैं, या आप फिर से सेलेक्ट कर सकते हैं।

नोट: मैं XCode 4.2 पर हूँ


अरे अगर यह काम करता है तो यह यहाँ सबसे अच्छा जवाब है (मौजूदा नियंत्रण के लिए कई नियंत्रणों को खींचने के लिए)
कॉलिन

@ Xcode 4.6.2 पर @me, इस पर डबल क्लिक करके सेकेंडरी व्यू विंडो को खोलना संभव नहीं है, इसलिए यह तरीका काम नहीं करता है।
कॉलिन

Xcode 5 में बिलकुल ठीक काम करता है। रिलेटिव पोजिशनिंग वही रहती है, बस वर्टिकल पोजिशनिंग ऑफ होती है, लेकिन यह पूरे ग्रुप को एक बार में रिप्लेस करने के लिए काफी आसान है।
क्िक्स

बुरी बात यह है कि आप अपने ऑटोलैयट बाधाओं को खो देते हैं: '( indiestack.com/2013/12/transplanting-constraints यहां आप "ट्रांसप्लांटिंग" बाधाओं का रास्ता पा सकते हैं
जोआन कार्डोना

4

मैंने स्टोरीबोर्ड का उपयोग किए बिना, स्टीफन के समाधान के समान कुछ किया है। IB में जबकि ViewController का दृश्य खुला है:

  1. VC के मुख्य दृश्य के अलावा एक और दृश्य बनाएं
  2. सभी सबव्यू को दूसरे दृश्य में ले जाएं उन्हें एक दृश्य से दूसरे तक खींचकर (बाईं ओर की सूची से खींचकर उनकी स्थिति को रीसेट करता है) यदि आप अपने माउस का उपयोग करके आईबी से उन्हें नहीं चुन सकते हैं तो बाईं ओर की सूची से सभी का चयन करें "cmd" बटन का उपयोग करके IB पैनल से एक अंतिम सबव्यू चुनें।
  3. प्रारंभिक मुख्य दृश्य पर उन्हें अंतिम दृश्य पर वापस ले जाएं।
  4. जोड़ा गया दृश्य निकालें, सभी सेट करें।

2

किसी अन्य दृश्य और पदों को बनाए रखने के लिए साक्षात्कार की प्रतिलिपि बनाने के लिए यह सबसे अच्छा समाधान है:

  1. अपने उप-क्रम में इच्छित आइटम का चयन करें, फिर
  2. संपादक -> एंबेड इन -> दृश्य
  3. इस दृश्य की प्रतिलिपि बनाएँ (Cmd + C)
  4. पूर्ववत करें (Cmd + Z) (चूंकि आप सिर्फ साक्षात्कार चाहते थे)
  5. उस दृश्य पर जाएं, जिसमें आप सबव्यू चाहते हैं और इसे पेस्ट करें (Cmd + V)
  6. उस एम्बेडिंग दृश्य का चयन करें जिसे आपने कॉपी-पेस्ट किया है और संपादक -> अनएम्बेडेड

चरण 6 एम्बेडिंग दृश्य को हटा देगा और आपने बस साक्षात्कारों की प्रतिलिपि बनाई होगी।


2

जब एक माता-पिता दृश्य को खींचकर दूसरे दृश्य (UIView, ScrollView, StackView) में लाया जाता है, तो Xcode इंटरफ़ेस बिल्डर गड़बड़ करता है

प्रश्न:
स्क्रॉल दृश्य में या किसी अन्य शीर्ष स्तर के दृश्य में एंबेडेड एक दृश्य (जिसमें इसके भीतर कई अन्य साक्षात्कार शामिल हैं) सीधे नहीं है जो मैंने अब तक देखा है। इसके बाद जल्द ही क्या होता है सभी साक्षात्कार गलत प्रतीत हो सकते हैं क्योंकि यह उनके मूल फ्रेम को नहीं खोज सकता है।

A:
निम्नलिखित चरणों का पालन करें और आप इसे यथासंभव आसान हल करने में सक्षम होंगे:

  1. अपने उप-क्रम में इच्छित आइटम का चयन करें, फिर
  2. मेनूबार, संपादक -> एंबेड इन -> दृश्य पर जाएं
  3. इस नए दृश्य (Cmd + C) को सबव्यू के साथ कॉपी करें (वर्तमान में मेरे लिए इस समय सभी बाधाओं को संरक्षित किया गया है]]
  4. दृश्य पर जाएं (यह एक स्क्रॉल दृश्य हो सकता है या StackView हो सकता है) आप चाहते हैं कि सबव्यू इन हों और कॉपी किए गए दृश्य (Cmd + V) को चिपकाएँ
  5. पेस्ट किए गए एंबेडेडिंग व्यू (जिसे आपने पहले बनाया था) का चयन करें और Xcode के मेनूबार पर जाएं, संपादक -> अनएम्बेडेड

नहीं, अभी तक समाप्त नहीं हुआ है! कभी-कभी, आप अनुभव कर सकते हैं कि कुछ और यूआई बाधा संबंधित मुद्दे हैं, आपको उन्हें तदनुसार हल करना होगा।


1

मैंने एक और दृष्टिकोण का पता लगाया। यह मूल रूप से है: मूव = कट + पेस्ट

इस तरह से आप करते हैं:

  • नए मूल दृश्य (P ') के बच्चे होने के लिए अपने सभी साक्षात्कार प्राप्त करें
  • (लगभग) अपने सभी बाधाओं को ऑटो-लेआउट आधारित स्टोरीबोर्ड में रखें
  • अपने सबव्यू के रिलेटिव पोज़िशन्स (फ्रेम) को एक-दूसरे से रखें

इस तरह से आप नहीं:

  • टेक्स्ट एडिटर में स्टोरीबोर्ड फ़ाइल को संपादित करें

आधार यह है कि स्टोरीबोर्ड में एक (रूट) को छोड़कर प्रत्येक दृश्य का अपना मूल दृश्य है । अगला, जब आप कई सबव्यू को कॉपी / स्थानांतरित करते हैं, तो आप फ्रेम और बाधाओं को खो देते हैं

जवाब बहुत आसान है। आप अपने मूल दृश्य (P) को नए पैरेंट व्यू (P ') में कॉपी करके अपने साक्षात्कार (SVs) की एक प्रति बनाते हैं। इस तरह से आपको उस मूल नए दृश्य (P ') से केवल अपने नए माता-पिता के दृश्य के लिए बाधाओं को फिर से बनाने की आवश्यकता हो सकती है, लेकिन हर उस सबवे के लिए नहीं जिसे आप स्थानांतरित करना चाहते थे।

आपके द्वारा पैरेंट व्यू (P) को नए (P ') में कॉपी करने के बाद, उस नए व्यू (P') से:

  • उन सभी बच्चों को हटा दें जिन्हें आप स्थानांतरित करना चाहते थे
  • नए माता-पिता (P ') को फिर से बनाना
  • संभावित इंटरफ़ेस बिल्डर आउटलेट्स (SVs) को फिर से बनाएँ

और मूल मूल दृश्य (P) से आप:

  • उन सभी बच्चों को हटा दें जिन्हें आप स्थानांतरित करना चाहते थे

इससे पहले:

View1

View2

पी

SVs में आप चाहते करने के लिए कदम

SVs में आप-न-करना-चाहते-चाल

View3

उपरांत:

View1

View2

पी

SVs में आप-न-करना-चाहते-चाल

View3

पी '

SVs' में आप चाहते करने के लिए कदम

मुझे इस बात पर जोर देना चाहिए कि यदि आपने UIScrollView को एक अभिभावक के रूप में देखा है तो यह अच्छी तरह से सामान्य नहीं है। फिर इसकी एक प्रति फिर से एक UIScrollView होगी जो वांछनीय नहीं हो सकती है।

एक और बात यह है कि जब आप मूल अभिभावक के विचार (P) में से कुछ सबव्यू (SVs) को हटा देते हैं, तो आपको कुछ अड़चनों को फिर से बनाने की आवश्यकता हो सकती है यदि अन्य (गैर-चल सकने योग्य सबव्यू) उन्हें संदर्भित करते हैं। लेकिन आपको वैसे भी ऐसा करना चाहिए।


0

इस मुद्दे को हल करने में मुझे क्या मदद मिली-

  1. मूल अभिभावक दृश्य (स्क्रॉल दृश्य या uiview) को मूल स्तर पर xib में बनाएँ और तदनुसार आकार बदलें
  2. उन सभी विचारों को कॉपी करें जिन्हें आप इस पैरेंट व्यू के साक्षात्कार के रूप में देखना चाहते हैं और उन्हें चरण 1 में आपके द्वारा बनाए गए नए दृश्य पर पेस्ट करें
  3. इस बिंदु पर आपने इन विचारों को दोहराया होगा। नए जोड़े गए विचार गलत होंगे लेकिन फिर भी उसी क्रम में और एक दूसरे के संबंध में समान दूरी पर, एक ही दृश्य की पुरानी प्रतियों के साथ अपनी सीमा का मिलान करने के लिए उन्हें xib में संरेखित करें (यह मान लेता है कि नया मूल दृश्य पुराने के समान सीमाएं हैं)
  4. नए जोड़े गए विचार कुछ बाधाओं को खो देंगे, उन्हें ठीक करने के लिए पुराने विचारों को देखें
  5. पुराने विचारों को xib से हटाएं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.