web-dev-qa-db-ja.com

UITableViewのプロトタイプセルの左マージンを調整するにはどうすればよいですか?

Xcodeで[ファイル]→[新規プロジェクト...]→[iOS]→[マスター/ディテールアプリケーション]などを使用してUITableViewControllerを作成すると、プロトタイプセルでUITableViewが作成されます。

生成されるビュー階層は次のとおりです。

UITableViewController view hierarchy

以下にオレンジで示すように、セルのコンテンツUIView左端と「タイトル」テキストのUILabel要素の間に左の「マージン」が自動的に作成されます。

Prototype cell gap

これにより、実行時にデバイスの画面エッジとUILabelテキストの間に対応するマージンが作成されます。

Runtime gap

では、このギャップセットの幅はどこにあり、どのように調整できますか?

UILabelのサイズインスペクターのコントロールはグレー表示されています。

enter image description here

私の好みのオプションでは、Interface Builder内からこのギャップの幅を設定できますが、このギャップが設定されている場所と、プログラムでギャップを変更する方法も理解したいと思います。

52
j b

テーブルビューのcontentInsetプロパティを設定するだけです。必要に応じて値を設定できます。

self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);

出力結果

48
milanpanchal

Main.storyboardに移動し、UITableViewCell> Attributes Inspectorを選択します。 [区切り記号]ドロップダウンリストを[デフォルトインセット]から[カスタムインセット]に変更します。左インセットを15から0に変更します

enter image description here

38
farhan latheef

iOS 8から開始して、セルプロパティlayoutMarginsを使用できます。したがって、セルの余白を調整する正しい方法は、このプロパティをtableView:cellForRowAtIndexPathまたはカスタムUITableViewCellに設定することです。

override func awakeFromNib() {
    super.awakeFromNib()

    self.layoutMargins = UIEdgeInsetsZero //or UIEdgeInsetsMake(top, left, bottom, right)
    self.separatorInset = UIEdgeInsetsZero //if you also want to adjust separatorInset
}

これが誰かを助けることを願っています。

37

以下のリンクに記載されているように、コードにメソッドを追加するだけです

右側にギャップを作成せずに、UITableViewの左側のマージンを削除するにはどうすればよいですか?

私が言及したい方法は

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [tableView setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    cell.preservesSuperviewLayoutMargins = NO;
    [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
    [cell setSeparatorInset:UIEdgeInsetsZero];
    }
}
8
Chetan

TableViewの「属性インスペクター」で、セパレータインセットを「カスタム」に設定し、Left = 0にします。これですべてです。

6
Nicolai Nita

WTIFSで述べたように、UITableViewCellindentationプロパティは、組み込みセルスタイルのテキストラベルをインデントするのに最適な方法です。ニースの左マージンを実現するには、次のようにします。

cell.indentationLevel = 2;

ただし、これはimageViewでは機能しません。

4
Dannie P

セルにxibを使用している場合、「マージンとの相対」がオフになっていることを確認してください。次のスクリーンショットに示すように、インスペクターでこれを確認できます。

enter image description here

Chetanの答えのSwiftバージョンは次のとおりです。

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        tableView.separatorInset = UIEdgeInsets.zero
        tableView.layoutMargins = UIEdgeInsets.zero
        cell.preservesSuperviewLayoutMargins = false
        cell.layoutMargins = UIEdgeInsets.zero
        cell.separatorInset = UIEdgeInsets.zero
}
1
Paul Lehn

簡単な解決策を思いついたと思います。笑。

一番上の答えには問題があります...左のギャップは小さくなりますが、右のギャップが生じます。

Interface Builderでconstrainsを使用しました。

最初に-15左マージン制約をテーブルビューに追加します。

次に、いくつかのインデントをテーブルセルに追加して、コンテンツの外観を良くします。


ここにいくつかの段階的な写真があります:

制約を追加します。 「最近傍への間隔」のチェックを外すことを忘れないでください。

Add the constraint. Remember to uncheck the "spacing to nearest neighbor".

テーブルセルが左に移動します。しかし、マージンに近すぎるようです。

After adding the constraint

テーブルセルを選択し、右側の領域にインデントを追加します。

add some indentation

0
WTIFS

また、セルのテキストラベルの左マージンのみを変更する場合は、Horizontal Space Constraint 'Constant'を、希望するパディングに基づいて16または8に変更します(これはnibファイルにあります)。 「定数」に到達できない場合は、ラベルを選択し、FrameRectangleビューでx座標を変更してから、左側の制約ピンをクリックします) enter image description here

0
Naishta