2016-04-13 7 views
9

मैं <Table> एचटीएमएल टैग की तुलना में एक समान व्यवहार करना चाहता हूं, इस अर्थ में जहां फ्रेम उसकी सामग्री के अनुसार आकार में है।इसकी सामग्री के आधार पर UIStackView का आकार कैसे लगाएं?

मेरे संदर्भ में, मैं UITtackView को UITableViewCell के सामग्री दृश्य के रूप में उपयोग करता हूं। चूंकि सेल में आइटम विभिन्न जानकारी हैं, इसलिए सेल की परिणामी ऊंचाई परिवर्तनीय होनी चाहिए।

मेरे रणनीति प्रोग्राम के रूप में, एक .Vertical अक्ष के साथ एक UIStackView के रूप में एक सेल का निर्माण करने के कोड स्निपेट में के रूप में इस प्रकार है:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 

    let sv = UIStackView(frame: tableview.frame) 
    sv.axis = .Vertical 
    cell.addSubview(sv) 
    for i in information { 
     let l = UILabel() 
     l.text = i 
     sv.addSubViewAndArrange(l) 
    } 

    return cell 
} 

दुर्भाग्य से, सेल के आकार सामग्री को समायोजित नहीं है, और के रूप में नतीजतन मुझे सेल ऊंचाई को स्वयं सेट करना होगा:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return cellHeight  // a constant 
} 

मैं इसे कैसे ठीक कर सकता हूं?

+1

मुझे लगता है कि आप ठीक ढंग से इस दृष्टिकोण काम करने के लिए सेल के साथ अपने stackView में रोके चाहिए:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TableviewCell", for: indexPath) as! TableviewCell for i in 1...indexPath.row + 1 { let label = UILabel() label.text = "Row \(indexPath.row), Label \(i)" cell.stackView.addArrangedSubview(label) } return cell } 

यहाँ अंतिम परिणाम है। – zcui93

+1

मैंने पहले से ही इस पथ का परीक्षण किया है (सेल में टीवी टी-टी, एल-एल, आर-आर, बी-बी बाधाओं को जोड़ा गया है), लेकिन इसके परिणामस्वरूप अल्ट्रा वाइड सेल (आप मुश्किल से एक ही समय में केवल एक सेल देखते हैं)। @ zcui93 –

+0

अपने आप पर स्टैक व्यू सेल से बाधित होना चाहिए, ताकि सेल इसके साथ बढ़े। फिर सबव्यूव्स सेट अप करें ताकि स्टैकव्यू उनके "आंतरिक सामग्री आकार" के आधार पर ठीक से बढ़ेगा – zcui93

उत्तर

0

UIStackView सामग्री के अनुसार अपना आकार बढ़ाने के लिए डिज़ाइन किया गया है। इसके लिए काम करने के लिए, आपको UIStackView और UITableViewCell के बीच बाधाओं को स्थापित करने की आवश्यकता है। उदाहरण के लिए, इस कमी इंटरफ़ेस बिल्डर में की तरह लग रही है कि कैसे है:

enter image description here enter image description here

आप तो कोड में कमी की स्थापना की तरह, वह भी काम करना चाहिए।

यह दिखाने के लिए कि यह काम करेगा, मेरे पास यह cellForRowAt फ़ंक्शन के लिए है। असल में, यह UIStackView के अंदर UILabel को रखता है और लेबल गणना पंक्ति संख्या के आधार पर होती है।

https://github.com/yzhong52/AutosizeStackview

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