2013-04-18 15 views
8

का उपयोग करते समय UIScrollView सामग्री को शून्य पर रीसेट कर दिया गया है, मैं की ऊंचाई बदलने के लिए autolayout का उपयोग कर रहा हूं। मैं कुछ subviewsscrollview पर जोड़ता हूं जहां मैं सामग्री आकार को मैन्युअल रूप से बढ़ाता हूं। लेकिन जब मुझे एक ऐसी घटना मिलती है जहां मैं ऊंचाई को बदलने वाला हूं तो सामग्री का आकार शून्य है।ऑटो लेआउट

-(void) addTag:(NSString *)tagName { 

    ... 
    [button addTarget:self action:@selector(tagPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self setContentSize:CGSizeMake(self.frame.size.width, self.contentSize.height+60)]; 
    [self.items addObject: button]; 
    NSLog(@"content height: %0.2f", self.contentSize.height); 


} 

कंसोल आउटपुट::

2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00 

यहाँ मैं उत्पादन contentSize:

- (void)tagPressed:(UIButton *)sender { 

    NSLog(@"1 content height: %0.2f", self.contentSize.height); 
    ... 
} 

यहाँ कोड हैकंसोल से पता चलता है:

2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00 

मैं सामग्री ऊंचाई शून्य पर सेट क्यों नहीं है। मेरी मदद करो!

अद्यतन: यहां समस्या है जिसे मैं हल करने की कोशिश कर रहा हूं।

मेरे पास बटन के साथ स्क्रॉल दृश्य है। प्रारंभ में यह केवल एक बटन दिखाता है। जब बटन दबाया जाता है टैग दबाया जाता है: कहा जाता है। टैग दबाए गए सभी बटन दिखाने के लिए ऊंचाई बदलती है। फिर जब उपयोगकर्ता एक बटन का चयन करता है तो स्क्रॉलव्यू की ऊंचाई मूल में बदल जाती है और ऑफसेट बटन के मूल पर सेट होता है। नीचे कोड काम करता है लेकिन एनीमेशन सभी गलत है। अगर मैं ऑफ़सेट बदलता हूं और एनीमेशन ब्लॉक से पहले तो यह ऑफ़सेट को शून्य पर सेट करता है।

- (void)tagPressed:(UIButton *)sender { 

    CGPoint p; 
    float maxHeight = self.items.count * 60; 


    if (self.height.constant == maxHeight) { 
     self.height.constant = 60; 
     p = CGPointMake(0, sender.frame.origin.y-5);  
    }else { 
     self.height.constant = maxHeight; 
     p = CGPointMake(0, 0); 
    } 

    [self.superview setNeedsUpdateConstraints]; 

    [UIView animateWithDuration:0.5f animations: ^{ 
      [self.superview layoutIfNeeded]; 
    } completion:^(BOOL finished) { 
      [self setContentOffset:p]; 

    }]; 

}

+0

मैं मूल समस्या के साथ पोस्ट को अपडेट करूंगा। –

+0

मुझे नहीं पता कि आपको इसके लिए स्क्रॉल व्यू क्यों चाहिए। आपके पास एक दृश्य है जो या तो एक बटन दिखाता है या सभी बटन दिखाता है; स्क्रॉलिंग कहां है? बस उस दृश्य का उपयोग करें जो आकार बदलता है। इससे भी बेहतर, बस दिखाने और छिपाने के लिए और आवश्यक बटन, शायद। – matt

+0

ध्यान दें कि एक स्क्रॉल व्यू है इसलिए * उपयोगकर्ता * स्क्रॉल कर सकता है। * आप स्क्रॉल व्यू के बिना स्क्रॉल कर सकते हैं (यानी एक विशेष बटन दिखाएं), इसलिए यदि आप ऐसा करने की कोशिश कर रहे हैं, तो मैं स्क्रॉल व्यू से बचने का सुझाव दूंगा, जो आपको बहुत सी जटिलताओं को जोड़ता है (जहां तक ​​आपको आवश्यकता नहीं है जैसा कि मैं बता सकता हूं)। प्रतिक्रिया के लिए – matt

उत्तर

10

आप एक UIScrollView साथ ऑटो लेआउट का उपयोग करते हैं, तो आप contentSize गुण सेट नहीं है। अधिक जानकारी के लिए here देखें (UIScrollView पर अनुभाग पर नीचे स्क्रॉल करें)।

+2

मैं वास्तव में सामग्री ऑफसेट को बदलने की कोशिश कर रहा हूं। मैं उसे कैसे कर सकता हूँ? –

+2

आप ViewDidLayoutSubviews में ContentSize सेट कर सकते हैं।;: (शून्य) viewDidLayoutSubviews { [CGSizeMake (_scrollView.width * [_imageViews गिनती], 0) _scrollView setContentSize] - उस के लिए मुझे autolayout का उपयोग कर अर्थात बाहर ठीक काम करता है } – Yasper

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