Xcodeで[ファイル]→[新規プロジェクト...]→[iOS]→[マスター/ディテールアプリケーション]などを使用してUITableViewController
を作成すると、プロトタイプセルでUITableView
が作成されます。
生成されるビュー階層は次のとおりです。
以下にオレンジで示すように、セルのコンテンツUIView
左端と「タイトル」テキストのUILabel
要素の間に左の「マージン」が自動的に作成されます。
これにより、実行時にデバイスの画面エッジとUILabel
テキストの間に対応するマージンが作成されます。
では、このギャップセットの幅はどこにあり、どのように調整できますか?
UILabelのサイズインスペクターのコントロールはグレー表示されています。
私の好みのオプションでは、Interface Builder内からこのギャップの幅を設定できますが、このギャップが設定されている場所と、プログラムでギャップを変更する方法も理解したいと思います。
テーブルビューのcontentInset
プロパティを設定するだけです。必要に応じて値を設定できます。
self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);
出力結果
Main.storyboard
に移動し、UITableViewCell
> Attributes Inspector
を選択します。 [区切り記号]ドロップダウンリストを[デフォルトインセット]から[カスタムインセット]に変更します。左インセットを15から0に変更します
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
}
これが誰かを助けることを願っています。
以下のリンクに記載されているように、コードにメソッドを追加するだけです
私が言及したい方法は
-(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];
}
}
TableViewの「属性インスペクター」で、セパレータインセットを「カスタム」に設定し、Left = 0にします。これですべてです。
WTIFSで述べたように、UITableViewCell
のindentation
プロパティは、組み込みセルスタイルのテキストラベルをインデントするのに最適な方法です。ニースの左マージンを実現するには、次のようにします。
cell.indentationLevel = 2;
ただし、これはimageViewでは機能しません。
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
}
簡単な解決策を思いついたと思います。笑。
一番上の答えには問題があります...左のギャップは小さくなりますが、右のギャップが生じます。
Interface Builderでconstrainsを使用しました。
最初に-15左マージン制約をテーブルビューに追加します。
次に、いくつかのインデントをテーブルセルに追加して、コンテンツの外観を良くします。
↘
ここにいくつかの段階的な写真があります:
制約を追加します。 「最近傍への間隔」のチェックを外すことを忘れないでください。
テーブルセルが左に移動します。しかし、マージンに近すぎるようです。
テーブルセルを選択し、右側の領域にインデントを追加します。