2016-04-13 11 views
9

<Table> HTMLタグと同様の動作をしたいのですが、フレームの内容に応じてサイズが決められています。内容に応じてUIStackViewのサイズを変更するにはどうすればよいですか?

私の文脈では、私はUITableViewCellのコンテンツビューとしてUIStackViewを使用します。セル内の項目は様々な情報であるため、セルの高さは可変でなければなりません。

私の戦略は、次のようにコードスニペットのように、プログラムで、.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

:ここ

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

私はすでにこのパスをテストしています(セルにT-T、L-L、R-R、B-Bの制約を加えました)が、これは非常に広いセルになります。 @ zcui93 –

+0

それ自身のStackViewは、セルがそれと共に成長するように、セルに制約されるべきです。次に、スタックビューが "本質的なコンテンツサイズ"に基づいて適切に成長するように、サブビューを設定します。 – zcui93

答えて

0

UIStackViewは、内容に応じてサイズが大きくなるように設計されています。これを実行するには、UIStackViewUITableViewCellの間に制約を設定する必要があります。たとえば、これは制約がインターフェイスビルダーにどのように見えるかです:

enter image description here enter image description here

ます場合は、コード内の制約を設定するように、それはあまりにも動作するはずです。

これが機能することを実証するために、私はcellForRowAt機能のためにこれを持っています。基本的には、UIStackViewの内部にUILabelの数を置き、ラベル数は行番号に依存します。私はあなたが正しく動作するには、このアプローチのために電池を使用してstackViewを制約すべきだと思う

https://github.com/yzhong52/AutosizeStackview

関連する問題