2016-02-12 10 views
6

क्या आंतरिक अंतर्निहित सामग्री आकार बदलते समय एक व्यवस्थित सबव्यूम को एनिमेट करना संभव है?एनिमेटिंग UIStackView व्यवस्थित किया गया हैस्यूविंग सामग्री आकार परिवर्तन

उदाहरण के लिए, कल्पना करें कि मेरे पास एक व्यवस्थित सबव्यूव है, जिसमें एक एकल UILabel किनारों पर पिन किया गया है। उस लेबल में टेक्स्ट की एक छोटी सी मात्रा है। नया पाठ आता है, जो पिछले पाठ से बड़ा है। लेबल का आंतरिक सामग्री आकार अब बड़ा है।

मैं इतना है कि यह चेतन करने में सक्षम होना चाहते हैं:

stackView.layoutIfNeeded() 
self.label.text = self.expanded ? textTwo : textOne 
UIView.animateWithDuration(0.3) {() -> Void in 
    self.stackView.layoutIfNeeded() 
} 

stackview वर्तमान में पुरानी सामग्री आकार से नया करने के लिए "कूदता", एनीमेशन ब्लॉक अनदेखी।

पाठ्यक्रम का एक विकल्प व्यवस्थित सबव्यू की ऊंचाई को मैन्युअल रूप से ढूंढना और उस बाधा को एनिमेट करना है। यदि संभव हो तो मैं इससे बचना चाहूंगा।

+0

क्या आपने पर्यवेक्षण के लेआउट को समायोजित करने का प्रयास किया है? – jervine10

उत्तर

3

मिले कुछ है कि काम करता है:

label.text = expanded ? textOne : textTwo 
UIView.animateWithDuration(0.4) {() -> Void in 
    self.stackView.setNeedsLayout() 
    self.stackView.layoutIfNeeded() 
} 

काम नहीं करता:

label.text = expanded ? textOne : textTwo 
UIView.animateWithDuration(0.4) {() -> Void in 
    self.stackView.layoutIfNeeded() 
} 

अजीब है कि आंतरिक सामग्री आकार की बदलती नहीं है stackView लेआउट की जरूरत है, हालांकि ...

चाहते
+0

वाह! वह कैसे काम करता है?! –

+0

मुझे इस तरह से एनिमेट करने के लिए कुछ भी नहीं मिला। IntrinsicContentSize को बदलने से कुछ भी नहीं हुआ, लेकिन लेआउट बाधाओं के साथ इसे बदलना, हालांकि आदर्श नहीं था। –

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