2015-10-21 8 views
21

के साथ अपनी सामग्री की ऊंचाई पर UITableView की ऊंचाई सेट करें मेरे पास एक दृश्य है जिसमें इसके अंदर दो लेबल और एक टेबल व्यू है। मैं तालिका दृश्य के नीचे होने के लिए लेबल 1 को हमेशा अपने टेबल व्यू और लेबल 2 से ऊपर रखना चाहता हूं। समस्या यह है कि तालिका दृश्य को ऑटो-आकार की आवश्यकता होती है यानी ऊंचाई या कमी में वृद्धि होती है।ऑटो लेआउट

अभी मुझे एक बाधा है कि टेबल व्यू की ऊंचाई हमेशा 85 के बराबर होती है और @IBOutlet ऊंचाई की बाधा के लिए होती है जहां मैं निरंतर बदल सकता हूं।

मुझे अनुमान है कि मुझे निरंतर सभी कोशिकाओं की ऊंचाई में बदलने की जरूरत है, लेकिन मुझे यकीन नहीं है कि कैसे।

Menu constraints

+1

एक अन्य समाधान 'UITableView' का एक उपवर्ग अपने' contentSize.height' को अपने स्वयं के 'intrinsicContentSize.height' सेट है कि बनाने के लिए है। Http://stackoverflow.com/a/17335818/77567 देखें। –

+0

@robmayoff उत्तर मेरी राय में बेहतर है क्योंकि यह जोर्न उत्तर से अधिक गतिशील है। – Altimac

उत्तर

40

आप अपने UIViewController में updateViewConstraints() ओवरराइड और सेट ऊंचाई बाधा के निरंतर tableView.contentSize.height करने के लिए है: तो फिर

override func updateViewConstraints() { 
    super.updateViewConstraints() 
    tableHeightConstraint.constant = tableView.contentSize.height 
} 

क्या आप वाकई Label2 एक शीर्ष बाधा है कि बनाने के लिए है तालिका दृश्य के नीचे greaterThanOrEqual है। तालिका दृश्य के contentHeight उपलब्ध ऊंचाई से बड़ा होने पर आपको विवादित बाधाओं से बचने के लिए Required से High से तालिका दृश्य की ऊंचाई बाधा की प्राथमिकता को भी बदलना होगा।

+0

बिल्कुल सही, धन्यवाद। – Dumpen

+0

धन्यवाद आदमी, आपने मेरा समय बचाया :) – MRustamzade

+0

इसे देखने में IDDidLayoutSubviews, मेरे लिए काम किया। – GMHSJ

13

एक और समाधान है। आप टेबलव्यू 'contentSize' चर पर पर्यवेक्षक जोड़ सकते हैं। और टेबल दृश्य सामग्री में परिवर्तन करते समय स्वयं का आकार।

@IBOutlet weak var tableView: UITableView! 
@IBOutlet weak var tableHeightConstraint: NSLayoutConstraint! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tableView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.new, context: nil) 
} 
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    tableView.layer.removeAllAnimations() 
    tableHeightConstraint.constant = tableView.contentSize.height 
    UIView.animate(withDuration: 0.5) { 
     self.updateConstraints() 
     self.layoutIfNeeded() 
    } 

} 
+0

यह एक उत्कृष्ट उत्तर है। –

+0

यह सही है। सर्वश्रेष्ठ उत्तर – EmilioK

+0

आपका स्वागत है :) – nova

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