2017-10-25 21 views
1

動的なTableViewを作成していて、ストーリーボードでrowheightが44のセルを設定しています。したがって、テーブルビューの高さは、データベースが結果に従って返す行の数に基づいています。同時に、私はIBOutletのビューにtableViewの下部制約を接続しています。したがって、テーブルビューの高さはキーボードの上に重なることはなく、設定によってはある程度の距離が保たれます。私の質問は、どのようにiOS 10以下のsizeToFits()でtableView.frame.size.heightを更新できますか?UiTableviewは、iOS 10ではsizetofitを更新しませんが、iOS 11では動作しません。

は、ここでテーブルビューのsizetofitは、()より大きいに小さいから増加したことがないとき、tableView and contentView size for iOS 10

別の画像をより鮮明な画像を持っているいくつかのログです。 Another logs、データベースが0の結果を返す場合は完全に終了し、次にcontentSizeが0.0になると、いくつかのテキストを削除しようとすると、ContentSizeは44に戻ります。 contentSizeに基づいてサイズを適合させます。しかし、この場合、それはまだ0.0に固執し、決して更新しません。

iOS 11、tableView and contentView size for iOS 11の画像では、632のテーブルビューの高さは正しいです。なぜなら、ユーザーがtableView内でスクロールできるようにキーボードに干渉しないように自動レイアウトを設定したからです。

よりよく理解するためにいくつかのコード、

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    // configuration for tableViewCell. 

    tableView.sizeToFit() // WORKs for iOS 11 but doesn't update for iOS10 

    if UIDevice.current.userInterfaceIdiom == .pad { 
     tableView.setNeedsLayout() 
     tableView.layoutIfNeeded() 
     cell.backgroundColor = UIColor.darkGray 
    } 

    return cell 
} 

答えて

0

は、私はあなたが達成したい何をすべきかわかりません。 tableViewのサイズをコンテンツと同じにしたい場合は、実際にUITableViewの高さの制約を操作する必要があります。

の後に、高さをに設定してtableViewデータソースを更新する必要があります。 あなたがsizeToFit()を使用している場合は、手動で制約を計算して設定することを選択した場合、あなたもあなたのtableViewのdataSource

// using sizeToFit 
func loadData(){ 
    allData = loadFromDatabase() 
    tableView.reloadData() 
    tableView.sizeToFit() 
} 

を更新それを行う必要がありますあなたは、私が個人的に設定されます

func resizeTableView(){ 
    allData = loadFromDatabase() 
    tableView.reloadData() 
    let tableFrame = tableView.frame 
    tableFrame.size.height = tableView.contentSize.height 
    tableView.frame = tableFrame 
} 

を試すことができますsizeToFitの使用時にいくつかのバグが報告されたため、sizeToFitの代わりに手動でフレームを設定するか、制約を設定してください。

関連する問題