2012-10-07 19 views
9

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

[_infoView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_infoView(1730)]" options:0 metrics:nil views:views]]; 

[_scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_infoView]|" options:0 metrics:nil views:views]]; 

[_scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_infoView]|" options:0 metrics:nil views:views]]; 

[_scrollView addConstraint:[NSLayoutConstraint constraintWithItem:_infoView 
                 attribute:NSLayoutAttributeCenterX 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:_scrollView 
                 attribute:NSLayoutAttributeCenterX 
                 multiplier:1 
                 constant:0]]; 

आप देख सकते हैं, मैं फार्म की ऊंचाई पहली पंक्ति में निर्दिष्ट और scrollview स्वचालित रूप से अपनी सामग्री आकार adapts। अब मैं फॉर्म की ऊंचाई को बढ़ाना चाहता हूं, इसलिए मैंने ऊंचाई के लिए बाधा को रीसेट करने की कोशिश की है लेकिन यह काम नहीं करेगा। फिर मैंने [_scrollView setContentSize:] विधि का उपयोग करने का प्रयास किया है लेकिन यह भी काम नहीं करेगा। क्या कोई भी कृपया मेरी मदद कर सकता है? नीचे

+0

क्या आपने कभी यह पता लगाया है? मुझे यह पता लगाने में एक भयानक समय है। – mkral

उत्तर

-2

मुझे यकीन है कि जहां उपरोक्त कोड जोड़ सकते हैं, लेकिन नीचे आपका init समारोह में आपकी समस्या

का समाधान करना चाहिए नहीं कर रहा हूँ, जोड़ें:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
     [center addObserver:self selector:@selector(noticeShowKeyboard:) name:UIKeyboardDidShowNotification object:nil]; 
     [center addObserver:self selector:@selector(noticeHideKeyboard:) name:UIKeyboardWillHideNotification object:nil]; 

अपने ज

लिए नीचे दिए गए जोड़ें
CGSize keyboardSize; 
int keyboardHidden;  // 0 @ initialization, 1 if shown, 2 if hidden 

अपने मीटर के लिए नीचे जोड़े

-(void) noticeShowKeyboard:(NSNotification *)inNotification { 
    keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    keyboardHidden = 1; 
    [self layoutSubviews];  // Not sure if it is called automatically, so I called it 


} 
-(void) noticeHideKeyboard:(NSNotification *)inNotification { 
    keyboardHidden = 2; 
    [self layoutSubviews];  // Not sure if it is called automatically, so I called it 

} 

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    if(keyboardHidden == 1) { 
     scrollview.frame = CGRectMake(scrollview.frame.origin.x, scrollview.frame.origin.y, scrollview.frame.size.width, scrollview.frame.size.height + keyboardSize.height); 
    } 
    else if(keyboardHidden == 2) { 
     scrollview.frame = CGRectMake(scrollview.frame.origin.x, scrollview.frame.origin.y, scrollview.frame.size.width, scrollview.frame.size.height - keyboardSize.height); 
    } 
} 

मैंने layoutsubviews को ओवरराइड किया, अब मुझे लगता है कि इसे काम करना चाहिए।

+0

समस्या यह है कि यदि आपका निब ऑटो लेआउट रेक्ट आकार का उपयोग कर रहा है तो बाधाओं से प्रबंधित किया जाता है और उन्हें सख्त काम नहीं कर सकता – mastergap

+1

संपादित उत्तर की जांच करें, 'लेआउटब्यूव्यू' को ओवरराइड करने से आपकी समस्या हल होनी चाहिए ... – MuhammadBassio

4

यदि मैं समस्या को समझता हूं, तो मैं layoutSubviews पर कॉल करने के बजाय UIScrollView पर contentInset संपत्ति समायोजित करने की अनुशंसा करता हूं। ध्यान दें कि दस्तावेज़ कहते हैं:

इस सामग्री का उपयोग अपनी सामग्री के आसपास स्क्रॉलिंग क्षेत्र में जोड़ने के लिए करें। आकार की इकाई अंक है। डिफ़ॉल्ट मान UIEdgeInsetsZero है।

UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 100, 0); 
scrollView.contentInset = insets; 
:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 

फिर keyboardWillShow में आप यह कर सकते हैं:

तुम अब भी इतनी के रूप में पता करने के लिए जब अपने scrollview की ऊंचाई को समायोजित करने के लिए कीबोर्ड छिपाने/शो सूचनाओं के लिए सुनने के लिए है

100 वह ऊंचाई है जिसके द्वारा आप अपना scrollView समायोजित करना चाहते हैं। मैं इसे UITableView के साथ करता हूं जिसमें मेरे पास UITableViewCell एस के रूप में तत्व तत्व हैं और यह अच्छी तरह से काम करता है।

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