2011-06-01 8 views
9

मेरे पास एक UIView है कि मैं UITableView तालिकाFooterView प्रॉपर्टी की संपत्ति के रूप में सेटिंग कर रहा हूं। ऐसे मामलों में जहां टेबल व्यू और पाद लेख पूरे पैरेंट व्यू को भर नहीं पाते हैं, क्या यह निर्धारित करने का कोई तरीका है कि मुझे पाद लेख बनाने की कितनी लम्बाई चाहिए ताकि वह शेष स्थान को भर सके?पूरे माता-पिता दृश्य को भरने के लिए मुझे UITableView तालिकाFooterView कैसे विस्तारित किया जा सकता है?

मेरा अंतिम लक्ष्य दृश्य के नीचे गठबंधन करने के लिए एक डिलीट बटन प्राप्त करना है। यदि तालिका दृश्य मूल दृश्य से बड़ा है, तो मैं कुछ भी नहीं करने जा रहा हूं और यह ठीक करने के लिए डिलीट बटन दृश्य से बाहर होगा।

EDIT इसे फॉर्म शीट मोडल प्रकार में आईपैड पर काम करने की आवश्यकता है, जहां दृश्य सीमा केवल फॉर्म शीट की होनी चाहिए, न कि पूरी स्क्रीन।

उत्तर

14

मेरे सिर के ऊपर से: चूंकि UITableViews अनिवार्य रूप से UIScrollViews हैं, तो यह देखने के लिए कि यह स्क्रीन पर कितना है, देखने के लिए contentSize.height मूल्य का उपयोग करके देखें। फिर, अपनी पर्यवेक्षण की फ्रेम ऊंचाई से ऊंचाई में अंतर भरने के लिए तालिकाफूटर व्यू फ्रेम समायोजित करें। मूलतः:

CGRect tvFrame = tableView.frame; 
CGFloat height = tvFrame.size.height - tableView.contentSize.height; 
if (height > MIN_HEIGHT) { // MIN_HEIGHT is your minimum tableViewFooter height 
    CGRect frame = tableFooterView.frame; 
    tableFooterView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, height); 
} 
0

सिर्फ एक विचार: यदि तालिका दृश्य पंक्ति ऊंचाई तय कर चुका है, तो आप पंक्ति ऊंचाई और कुछ निश्चित राशि से पंक्तियों की संख्या गुणा कर सकते हैं। यदि पंक्ति की ऊंचाई तय नहीं होती है, तो आप सभी विभिन्न ऊंचाइयों को जोड़ सकते हैं।

0
CGRect parentFrame = myParentView.frame; //tells you the parents rectangle. 
    CGRect tableFrame = myTableView.frame; // tells you the tableView's frame relative to the parent. 

    float delta = parentFrame.size.height - tableFrame.size.height - tableFrame.origin.y; 

डेल्टा तालिका के नीचे और उसके कंटेनर व्यू के नीचे की दूरी के बीच की दूरी है।

3

@ octy के जवाब आईओएस 9. के लिए काम करेंगे हालांकि, आईओएस 10 के लिए ऐसा लगता है कि tableView के contentSize tableViewFooter ऊंचाई भी शामिल है। आईओएस 10 में मुझे निम्नलिखित की तरह कुछ करना पड़ा:

var rowDataBounds: CGRect { 
    get { 
     if numberOfSections <= 0 { 
      return CGRect(x: 0, y: 0, width: frame.width, height: 0) 
     } 
     else { 
      let minRect = rect(forSection: 0) 
      let maxRect = rect(forSection: numberOfSections-1) 
      return maxRect.union(minRect) 
     } 
    } 
} 

fileprivate func resizeFooterView(){ 

    if let footerView = tableFooterView { 

     var newHeight: CGFloat = 0 
     let tvFrame = self.frame; 

     if #available(iOS 10, *) { 

      newHeight = tvFrame.size.height - rowDataBounds.height - self.contentInset.bottom - self.contentInset.top 

     } 
     else { 

      newHeight = tvFrame.size.height - self.contentSize.height 

     } 
     if newHeight < 0 { 
      newHeight = 0 
     } 
     let frame = footerView.frame 
     if newHeight != frame.height { 
      footerView.frame = CGRect(x:frame.origin.x, y:frame.origin.y, width:frame.size.width, height: newHeight) 
     } 
    } 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    resizeFooterView() 
} 
संबंधित मुद्दे

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