Xcode 8とSwift 3.を使用してセルの自己サイズが正しく調整されたUITableViewController
があります。これで、Xcode 9と= Swift 4、彼らは展開していません、デフォルトの高さ44を使用しています。
(各UITableViewCell
に1つまたは2つの文があります)
私はこれを前に使用していました:
// MARK: - Table view delegate
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
...しかし、 iOS 11向けアプリの更新 がデフォルトは今は自己サイズ変更になると言っているため、コメントアウトできました:
展開ターゲットをiOS 11に変更して、Storyboardで遊んでみました(ただし、Table View CellスタイルBasicを使用しているため、行うべきAutoLayoutはあまりありません)起こっています。
UILabel
のタイトルを0行に設定し、改行を折り返しますが、Xcode 9の内部のテキストコンテンツに基づいてセルを展開するには近づきません。
ありがとう!
編集:
これは基本セルなので、固定のオプション(私にはない)です:
私は同じ問題を抱えていて、コードの行でそれを解決しました:
class MyTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
}
Xcodeのバグかもしれません。
Update
Xcode 9ベータ3の新機能:
Interface Builderは、UITableViewのestimatedRowHeightの設定をサポートするようになりました。これにより、推定高さをゼロ以外の値に設定することで、テーブルセルの自己サイズ変更が可能になり、デフォルトでオンになります。 (17995201)
同じ壊れたテーブルビューの問題がありました。修正はワンクリックでした。
テーブルビューを使用してxibまたはストーリーボードシーンに移動し、サイズインスペクターに移動すると、テーブルビューの高さ(動的なテーブルビューでも)が44になり、セクションが22になります。「自動」をクリックしてブーム、期待どおりに表示されます。
UITableViewControllerサブクラスのviewDidLoadで以下を指定することにも注意してください(layoutSubviewsは、tableViewControllerの最初のロードが半透明でないnavBarに対して正しく配置されない問題を解決します)。
self.tableView.estimatedRowHeight = 180;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableView layoutSubviews];
私は同じ問題を抱え、多くのドキュメントでそれについて読んで、満足のいく答えはこのようなものでした。適切な高さを得るには両方のオプションをチェックする必要があります。スクロールビューバーなどの初期UI設定には推定高さが必要です。
行の高さの非負の推定値を提供すると、Table Viewのロードのパフォーマンスを改善できます。テーブルに可変の高さの行が含まれている場合、テーブルのロード時にすべての高さを計算するのに費用がかかる場合があります。推定を使用すると、ジオメトリ計算のコストの一部を読み込み時間からスクロール時間まで延期できます。自己サイズのテーブルビューセルを作成する場合、このプロパティを設定し、制約を使用してセルのサイズを定義する必要があります。デフォルト値は0です。これは、推定がないことを意味します。 (Appleドキュメント)>
また、xCode 9にはバグがあり、自動高さ計算で遅延読み込みを適用しようとすると、予期せずスクロールするため、この点でプログラムを使用することをお勧めします。
self.postTableView.estimatedRowHeight = 200;
self.postTableView.rowHeight = UITableViewAutomaticDimension;
このようなもの。ありがとう!
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tblview: UITableView!
var selectindex = -1
var arrnumber = ["1","2","3","4","5"]
var image = ["index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrnumber.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)as! ExpandableTableViewCell
cell.lblnumber.text = arrnumber[indexPath.row]
cell.img.image = UIImage(named: image[indexPath.row] as! String)
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if (selectindex == indexPath.row)
{
return 250
}
else{
return 60
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if(selectindex == indexPath.row)
{
selectindex = -1
}else{
selectindex = indexPath.row
}
self.tblview.beginUpdates()
self.tblview.endUpdates()
}
}
に加えて
tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
tabeleViewCellのcontentView
に高さの制約を設定する必要があります。
class CustomTableViewCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let height: CGFloat = 200
heightAnchor.constraint(equalToConstant: height).isActive = true
}
}