web-dev-qa-db-ja.com

下部にUITableView余分なスペース

写真にあるように、私のテーブルビューの下部には余分なスペースがあります。

TableViewのすべての行の高さは71ptに固定されています。

enter image description here

はい、分かりました。

「スクロールビューインセットの調整」は、viewController(tableViewではなく)でマークされました。

これは answer の詳細な説明です

私の場合、これはUITableViewの下部にデフォルトで高さ18のフッターがあるためでした。 1に設定すると、下部の余分なスペースが削除されました。

2

@urgentxの answer は、私が望んでいたことのほとんどを実行しましたが、そこまで到達しませんでした。私は同様の状況です(チャットアプリのUITableViewを逆さまにしています)。ただし、それらの提案はセーフエリアの動作を完全に無効にします。これは、iPhone Xなどのデバイスでは望ましくないのです。トップナビゲーションバー。

テーブルビューを反転させても安全な領域を正しく回避できるようにするために、次のことを行いました。

override func viewDidLoad() {
    super.viewDidLoad()
    self.automaticallyAdjustsScrollViewInsets = false
    self.tableView.contentInsetAdjustmentBehavior = .never
}

その後:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    //fetch the safe area in layoutSubviews since this it's possible that they can change when the device is rotated
    let safeArea = self.tableView.safeAreaInsets
    //insets are **flipped** because the tableview is flipped over its Y-axis!
    self.tableView.contentInset = .init(top: safeArea.bottom, left: 0, bottom: safeArea.top, right: 0)
}

これは本質的にcontentInsetAdjustmentBehavior = .automatic動作ですが、インセットがY軸を横切って反転します。

1
Sirens

これは、ストーリーボード(iOS 11)を通じて簡単に修正できる方法です。

[テーブルビュー]> [サイズインスペクター]> [コンテンツインセット:なし]を選択します。

1
Saeed Ir

チャットメッセージ画面でUITableViewを上下逆にしたときにこの問題が発生しました。

テーブルビューを反転する前は、コンテンツインセットの上部に空白スペースが残っていたため、一番上までスクロールしても、コンテンツはナビゲーションバーの邪魔になりませんでした。ひっくり返すと、はめ込みが下に移動しました。

UITableViewのサイズインスペクターで 'コンテンツインセット'をNeverに変更して、このスペースを最後に削除します。

1
urgentx

この場合、テーブルビューの下部にスペース0をスーパービューに設定できます。

tableView.tableFooterView = UIView();

またはあなたは以下のようにすることができます、

下限値は1.0にする必要があります。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger )section {
    if(section == 0) {
       return 6;
    } else {
       return 1.0;
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger )section {
    return 5.0;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger )section {
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger )section {
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}
1
Varsha Shivhare

私の場合、tableViewはプログラムで作成され、スペースを消すにはtableView.estimatedRowHeightを設定する必要がありました

1
iOS Unit

組み込みのナビゲーションコントローラーがある場合、[ツールバーを表示]をオンにすると、ビューコントローラーに下部のスペースが作成されます。チェックを外すだけです。

enter image description here

0
Yonatan Vainer

同じ問題がありました。最新のXcode(11.3)と最新のiOS(13.3)iPhoneです。私は多くの答えを試しましたが、どれもうまくいきませんでした。

私のtableViewには、上、下、リーディング、およびトレイルの制約がありますが、どういうわけか最後のセルの下の下部に大きなスペースがあります。 (tableView.contentSize.heightは必要な量のほぼ2倍でした)tableViewのデータは動的ではありません。データが表示されているビューコントローラーとtableViewが非表示になっている場合の両方で表示されます。

以下のようにscrollViewのデリゲートメソッドを使用して解決しました。これにより、ユーザーがドラッグを開始すると高さが調整されます。私にとって、それはとても素晴らしい働きをします、あなたにも望みます!

// this is the best place to adjust the contentSize.height of tableView.
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    print("scrollViewWillBeginDragging():") // optional
    // replace allParkingGeos.count with your data for tableView
    tableView.contentSize.height = CGFloat(allParkingGeos.count) * cellHeight
}
0
Brian Hong

IOS 11とXcode 9に関しては、受け入れられたソリューションはもはや正しいものではありません。同様の効果を得るには、サイズインスペクターに移動して、これを見つけることができます。

enter image description here

あなたはコードで同じことを達成することができます:

if #available(iOS 11.0, *) {
    scrollView.contentInsetAdjustmentBehavior = .never
} else {
    automaticallyAdjustsScrollViewInsets = false
}
0
Dmitry