2014-09-18 5 views
6

मैं ऑटो लेआउट,iOS8 अलग व्यवहार: view.transform साथ autolayout = CGAffineTransformMakeScale (0.5, 0.5), दृश्य तैनात सही ढंग से

मैं एक छोटे UISwitch और फिर view.transform = CGAffineTransformMakeScale(0.5, 0.5) का उपयोग यह महसूस करने के लिए करना चाहते हैं का उपयोग कर रहा नहीं है।

इस स्विच के ऊपर एक और दृश्य है। यह स्विच के अग्रणी इस दृश्य की अग्रणी धार को गठबंधन किया जाना चाहिए, और दृश्य और स्विच के बीच एक निश्चित ऊर्ध्वाधर अंतरिक्ष, निम्न चित्र की तरह है: iOS7

पर

enter image description here दृश्य

हालांकि, वहाँ iOS8 पर विभिन्न उपस्थिति है: iOS8

पर

enter image description here दृश्य लगता है की कमी इस स्विच करने के लिए लागू नहीं कर रहे हैं की तरह।

लेकिन मैं self.view.layoutSubviews() और self.view.layoutIfNeeded()

यह काम नहीं करता है कहा जाता है।

इस स्विच को हमेशा उपरोक्त दृश्य के दाएं कोने में चिपकने के लिए कैसे रखा जाता है?

यहाँ घटाया नहीं स्विच है

enter image description here

+0

ऑटो लेआउट परत रूपांतरण साथ काम नहीं करता –

+0

@MaxMacLeod मैं बस सोच रहा हूं कि आईओएस 7 और आईओएस 8 पर एक ही कोड का अलग व्यवहार क्यों है। मुझे लगता है कि आपका मतलब यह जवाब है [लिंक] (http://stackoverflow.com/questions/12943107/how-do-i-adjust-the-anchor-point-of-a-calayer-when-auto-layout-is- इस्तेमाल किया जा रहा/14105757 # 14105757), है ना? –

+0

मुझे लगता है कि यह इस तरह व्यवहार करता है क्योंकि यूआईएसविच का आंतरिक सामग्री आकार डिफ़ॉल्ट रूप से रहता है: 51px h: 31px दृश्य परिवर्तन के परिवर्तन के बावजूद। आपको UISwitch को उपclass करने और CGSizeMake (25.5f, 15.5f) लौटकर - (CGSize) intrinsicContentSize विधि को ओवरराइड करने का प्रयास करना चाहिए –

उत्तर

0

आप यहाँ से जाने के लिए दो संभव तरीके हैं: या तो उपवर्ग UISwitch और उपवर्ग में सभी आवश्यकतानुसार संशोधन लागू करने के लिए प्रयास करें, या एक नया UIView जिसमें शामिल परिभाषित एक संशोधित UISwitch एक सबव्यू के रूप में। उपclass सबसे तेज़ हो सकता है, लेकिन यह ट्रिकियर और जोखिम भरा है क्योंकि यूआईएसविच इस तरह के संशोधन के लिए उप-वर्ग होने का इरादा नहीं था।

जाना चाहिए तुम्हें उपवर्गीकरण तरीका अपनाते हैं, यहाँ संशोधनों आप बनाने की जरूरत है कर रहे हैं:

  1. लागू स्केलिंग self को बदलना, जाहिर है।

  2. alignmentRectForFrame: ओवरराइड करें, इसलिए यह super.alignmentRectForFrame: प्लस आपके स्केलिंग ट्रांसफॉर्म को लौटाता है।

  3. ओवरराइड intrinsicContentSize, तो यह super.intrinsicContentSize रिटर्न के साथ साथ अपने स्केलिंग को बदलने

असल में, नंबर 1 वास्तविक दृश्य परिवर्तन करना चाहिए। लेकिन नए दृश्य के आकार के बारे में ऑटो लेआउट को सूचित करने के लिए 2 और 3 आवश्यक हैं, क्योंकि डिफ़ॉल्ट रूप से AL को ट्रांसफॉर्म के बारे में पता नहीं है।

0

The View के केंद्र के चारों ओर जगह एक दृश्य के बदलने ले जा रहा है, इसलिए जब आप फोन

view.transform = CGAffineTransformMakeScale(0.5, 0.5) 

यह भावना है कि यह iOS 8 में इस तरह दिखता है बनाता है, कारण iOS 7 में है कि यह अच्छा लग रहा है है शायद आईओएस 7 में एक बग की वजह से।

कोशिश इस तरह प्रमुख बाधा के लगातार बदलने के लिए:

self.switchLeadingConstraint.constant = -(self.mySwitch.bounds.size.width/4) 

इस तरह आप ऑफसाइड आप आईओएस में है पर भरपाई कर सकते हैं 8.

संबंधित मुद्दे