UITableViewについて質問があります... UITableViewControllerがあり、カスタムセルを作成しました。 tableViewを視覚化すると、このスクリーンショットを見るとわかるように、区切り線の前に小さな空白があります。
どうして?デフォルトの視覚化ですか?この白い左パディングを削除するために何かを変更できますか?
IOS 7では、カスタムセルであっても、デフォルトで先頭の空白が提供されます。
UITableviewCellのこのプロパティseparatorInset
をチェックアウトして、セルの行セパレーターの両端の空白を削除/追加します。
//空白を削除します
cell.separatorInset = UIEdgeInsetsZero;
または、UITableViewレベルで、このプロパティを使用できます-
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { // Safety check for below iOS 7
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
-(void)viewDidLayoutSubviews
{
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
または、これをインターフェイスビルダー(IB)で編集することもできます。
これは@Ashokの答えと同じ効果がありますが、コードを書く必要はありません。
更新 iOS 7および8で動作
更新 iOS 9で動作
以下のコードを使用して、UITableViewの不要なパディングを削除します。両方で動作しますIOS 8&7
-(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 ([cell respondsToSelector:@selector(setLayoutMargins:)])
{
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
空白はありません!これにバグを入力し、Appleは「バグではない」として閉じましたが、なぜバグではないのかを教えてくれました。 simple project Appleが言ったように、これらのピクセルの色は実際にはセル自体の背景色(contentsViewではありません!)であるということです私。
Cell.contentView.backgroundColorは緑で、cell.background色は赤です(Pixieで撮影):
最終的に、セパレータなしで、cell.contentViewはセルを完全に埋めます。セパレータを使用すると、下部にピクセルまたは2つのギャップがあります。セパレータは、挿入されると、ほとんどのギャップを埋めますが、セルの一部のピクセルが透けて見えます。
謎が解けた!
編集:ストーリーボードの設定方法によっては、contentView.backgroundColorが「失われる」か、白に設定されるようです。セルを供給するときにそれを乗り越えれば、あなたが望む行動を得ることができます:
let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell
cell.backgroundColor = UIColor.redColor()
cell.contentView.backgroundColor = UIColor.greenColor()
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
}
これは私のために働いた
ありがとう
これは私のためにトリックをしました:
cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
SwiftでUIEdgeInsetSettingsを保持し、ストーリーボードを使用していない場合:
変更前:(デフォルトの動作)
次のコードを追加します。
tableView.separatorInset.right = tableView.separatorInset.left
Swift 3以降のUITableViewCellクラスの拡張です
extension UITableViewCell
{
func removeSeparatorLeftPadding() -> Void
{
if self.responds(to: #selector(setter: separatorInset)) // Safety check
{
self.separatorInset = UIEdgeInsets.zero
}
if self.responds(to: #selector(setter: layoutMargins)) // Safety check
{
self.layoutMargins = UIEdgeInsets.zero
}
}
}
使用法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")!
// .. Your other code
cell.removeSeparatorLeftPadding()
return cell
}
これが何らかの助けになることを願っています!
ナレシュ。