私は、そのセルの高さが表示されているテキストの量に応じた大きさでのUITableViewを作成しようとしています。 heightForRowAtIndexPath
が利用可能であり、私は以下のコードを使用してUILabel
するために必要な必要なサイズを取得することができ、これは、十分に簡単に思えました。しかし、この方法は私には非常に奇妙な選択を思わセルの内容に基づいて、私はできない大きさcellForRowAtIndexPath
前に呼び出されます。コンテンツに基づいてセルの高さを動的にサイズ調整する "ベストプラクティス"の方法は何ですか?また動的にサイズ変更のUITableViewCellハイツ
、なぜAppleはheightForRowAtIndexPath
メソッドがcellForRowAtIndexPath
後に呼び出されることはありませんでしたか?
私はラベルのために必要な高さを決定するためにcellForRowAtIndexPath
で次のように使用していますが、私はdequeReusableCellWithIdentifier
は(私の知る限り)メソッドで呼び出すことはできませんので、heightForRowAtIndexPath
にこれを移動するかどうかはわかりません。
func getRequiredLabelHeight(label: UILabel, text: String, font: UIFont) -> CGFloat {
label.numberOfLines = 0
label.lineBreakMode = .ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
新しいラベルのサイズに基づいて、初期サイズ(1行のラベルでヒンジしている)からセルのサイズを増やしたいので、次のセルの高さが必要です。行の任意の長さ)
self.cellHeight = getRequiredLabelHeight(commentCell.commentTextLabel, text: allComments![indexPath.row].text, font: UIFont(name: "Avenir", size: 16.0)!) + commentCell.bounds.height - commentCell.commentTextLabel.bounds.height
ありがとう!
EDIT 私の質問はラベルのサイズ変更に関するものではありません。私が提供したコードはそれを行います。問題はセルの高さが一定ではないことです。内容に基づいてテーブル全体で変化するので、私はスタティックtableview.rowHeight
を使用することはできません。セルの高さをcellForRowAtIndexPath
から変更できないため、コンテンツがセルに収まりません。 UILabelのフレームがthan tableview.rowHeight
大きくなると
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let commentCell: CommentTableViewCell = tableView.dequeueReusableCellWithIdentifier("commentTableViewCell", forIndexPath: indexPath)
as! CommentTableViewCell
commentCell.commentTextLabel.textColor = Utils.hatchliTextDark
commentCell.commentTextLabel.font = UIFont(name: "Avenir", size: 16)
self.cellHeight = getRequiredLabelHeight(commentCell.commentTextLabel, text: allComments![indexPath.row].text, font: UIFont(name: "Avenir", size: 16.0)!) + commentCell.bounds.height - commentCell.commentTextLabel.bounds.height
commentCell.commentTextLabel.frame = CGRectMake(commentCell.commentTextLabel.frame.origin.x, commentCell.commentTextLabel.frame.origin.y, commentCell.commentTextLabel.frame.width, self.cellHeight)
commentCell.handleTextLabel.text = String(allComments![indexPath.row].creatorHandle)
commentCell.votesTextLabel.text = String(allComments![indexPath.row].votes)
commentCell.commentTextLabel.text = allComments![indexPath.row].text
commentCell.setMargin()
return commentCell
}
そう、それは表示されません:たとえば、ここに私はcellForRowAtIndexPath
(一言で言えば)です。したがって、行の高さがheightForRowAtIndexPath
からセル毎にリサイズする必要
と呼ばれているであることを確認してください。テーブルビューは、現時点で表示されている少数のセルを表示する必要がある前に、完全な高さを知る必要があります。 – rmaddy
セルのサイズを自動的に変更するオートレイアウトを使用していますか?そうでなければ、 'tableView:heightForRowAtIndexPath:'メソッドの現在のコードは何ですか?あなたは次のような答えを見たことがありますか:http://stackoverflow.com/q/20068849/558933、http://stackoverflow.com/q/25180443/558933、http://stackoverflow.com/q/27374612/558933 –
は、セル単位でUITableViewのセルの高さを自動レイアウトできますか? – treyhakanson