更改 tableviewcell 的宽度 swift
change width of tableviewcell swift
我有一个使用带有自定义单元格和原型单元格的 IB 的 tableView。
我正在尝试使单元格的宽度比 tableView.frame 稍短,以便在左右角之间留出一点 space。
var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell
cell.bounds = CGRectMake(10, self.tableView.frame.origin.y, 30, self.tableView.frame.size.height)
cell.layer.bounds = CGRectMake(10, self.tableView.frame.origin.y, 30, self.tableView.frame.size.height)
cell.textLabel?.bounds = CGRectMake(10, self.tableView.frame.origin.y, 30, self.tableView.frame.size.height)
更新: 这是一个很好的例子,解释了如何将子视图添加到您的 tableView。
http://natashatherobot.com/ios-frame-vs-bounds-resize-basic-uitableview-cell/
更新 2: 看起来没有简单的方法可以做到这一点。据我所知,有 3 种方法可以实现这一点:
- 向您的单元格添加一个圆角的、较短的图像,使其具有完全相同的颜色并与您的背景相匹配。
- 您可以子类化 tableViewCell,然后使用 layoutSubviews,这样您可以在绘制单元格之前缩短它。我已经做到了,但是滚动性能很糟糕。
- 最好的方法是完全放弃 tableView 并用 collectionView 重新做。
table视图中的单元格应该与其容器一样宽。
如果您需要您的单元格具有与 table 视图不同的宽度,我建议将视图作为子视图添加到 cell.contentView
并使该视图尽可能宽,同时确保contentView
具有清晰的背景并且没有分隔符和所有内容(因此它看起来不存在)。
另一种解决方案是通过向其添加 left/right 填充,使 tableView
不像 superview
那样宽。但是你会遇到这样的问题,即在填充所在的左侧和右侧,你将无法滚动 tableView
我认为最干净的解决方案是使用 collectionView
。它与 tableView
没有太大区别,您可以配置单元格的整个大小,而不仅仅是高度。
希望这可以帮助您解决问题。如果您需要更多帮助,请告诉我。
Swift 3:
对于仍在寻找好的解决方案的人来说,有一种比使用 layoutSubviews
或使用 collectionView
重做整个事情更简单、更有效的替代方法。
如果您已经对 tableViewCell 进行了子class编辑,那么在您的 TableViewController class 中您可以添加它以在 [=] 的每一侧添加纯白色边框28=] 查看单元格。
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// make sure in storyboard that your cell has the identifier "cell" and that your cell is subclassed in "TableViewCell.swift"
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
// the following code increases cell border on all sides of the cell
cell.layer.borderWidth = 15.0
cell.layer.borderColor = UIColor.white.cgColor
return cell;
}
如果你想给单元格的每一边添加不同大小的边框,你也可以这样做:
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
// the following code increases cell border only on specified borders
let bottom_border = CALayer()
let bottom_padding = CGFloat(10.0)
bottom_border.borderColor = UIColor.white.cgColor
bottom_border.frame = CGRect(x: 0, y: cell.frame.size.height - bottom_padding, width: cell.frame.size.width, height: cell.frame.size.height)
bottom_border.borderWidth = bottom_padding
let right_border = CALayer()
let right_padding = CGFloat(15.0)
right_border.borderColor = UIColor.white.cgColor
right_border.frame = CGRect(x: cell.frame.size.width - right_padding, y: 0, width: right_padding, height: cell.frame.size.height)
right_border.borderWidth = right_padding
let left_border = CALayer()
let left_padding = CGFloat(15.0)
left_border.borderColor = UIColor.white.cgColor
left_border.frame = CGRect(x: 0, y: 0, width: left_padding, height: cell.frame.size.height)
left_border.borderWidth = left_padding
let top_border = CALayer()
let top_padding = CGFloat(10.0)
top_border.borderColor = UIColor.white.cgColor
top_border.frame = CGRect(x: 0, y: 0, width: cell.frame.size.width, height: top_padding)
top_border.borderWidth = top_padding
cell.layer.addSublayer(bottom_border)
cell.layer.addSublayer(right_border)
cell.layer.addSublayer(left_border)
cell.layer.addSublayer(top_border)
return cell;
}
希望这对您有所帮助。
我找到了其他答案 unhelpful/incorrect,但在此处的其中一个答案中找到了我需要的内容:
How to set the width of a cell in a UITableView in grouped style
关键是,如果您有自定义单元格(OP 有,大多数应用程序都会有),那么您可以将 setFrame 方法重写为您需要的任何宽度。无需重新设计您的应用或做任何棘手的事情。
我有一个使用带有自定义单元格和原型单元格的 IB 的 tableView。
我正在尝试使单元格的宽度比 tableView.frame 稍短,以便在左右角之间留出一点 space。
var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell
cell.bounds = CGRectMake(10, self.tableView.frame.origin.y, 30, self.tableView.frame.size.height)
cell.layer.bounds = CGRectMake(10, self.tableView.frame.origin.y, 30, self.tableView.frame.size.height)
cell.textLabel?.bounds = CGRectMake(10, self.tableView.frame.origin.y, 30, self.tableView.frame.size.height)
更新: 这是一个很好的例子,解释了如何将子视图添加到您的 tableView。 http://natashatherobot.com/ios-frame-vs-bounds-resize-basic-uitableview-cell/
更新 2: 看起来没有简单的方法可以做到这一点。据我所知,有 3 种方法可以实现这一点:
- 向您的单元格添加一个圆角的、较短的图像,使其具有完全相同的颜色并与您的背景相匹配。
- 您可以子类化 tableViewCell,然后使用 layoutSubviews,这样您可以在绘制单元格之前缩短它。我已经做到了,但是滚动性能很糟糕。
- 最好的方法是完全放弃 tableView 并用 collectionView 重新做。
table视图中的单元格应该与其容器一样宽。
如果您需要您的单元格具有与 table 视图不同的宽度,我建议将视图作为子视图添加到 cell.contentView
并使该视图尽可能宽,同时确保contentView
具有清晰的背景并且没有分隔符和所有内容(因此它看起来不存在)。
另一种解决方案是通过向其添加 left/right 填充,使 tableView
不像 superview
那样宽。但是你会遇到这样的问题,即在填充所在的左侧和右侧,你将无法滚动 tableView
我认为最干净的解决方案是使用 collectionView
。它与 tableView
没有太大区别,您可以配置单元格的整个大小,而不仅仅是高度。
希望这可以帮助您解决问题。如果您需要更多帮助,请告诉我。
Swift 3:
对于仍在寻找好的解决方案的人来说,有一种比使用 layoutSubviews
或使用 collectionView
重做整个事情更简单、更有效的替代方法。
如果您已经对 tableViewCell 进行了子class编辑,那么在您的 TableViewController class 中您可以添加它以在 [=] 的每一侧添加纯白色边框28=] 查看单元格。
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// make sure in storyboard that your cell has the identifier "cell" and that your cell is subclassed in "TableViewCell.swift"
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
// the following code increases cell border on all sides of the cell
cell.layer.borderWidth = 15.0
cell.layer.borderColor = UIColor.white.cgColor
return cell;
}
如果你想给单元格的每一边添加不同大小的边框,你也可以这样做:
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
// the following code increases cell border only on specified borders
let bottom_border = CALayer()
let bottom_padding = CGFloat(10.0)
bottom_border.borderColor = UIColor.white.cgColor
bottom_border.frame = CGRect(x: 0, y: cell.frame.size.height - bottom_padding, width: cell.frame.size.width, height: cell.frame.size.height)
bottom_border.borderWidth = bottom_padding
let right_border = CALayer()
let right_padding = CGFloat(15.0)
right_border.borderColor = UIColor.white.cgColor
right_border.frame = CGRect(x: cell.frame.size.width - right_padding, y: 0, width: right_padding, height: cell.frame.size.height)
right_border.borderWidth = right_padding
let left_border = CALayer()
let left_padding = CGFloat(15.0)
left_border.borderColor = UIColor.white.cgColor
left_border.frame = CGRect(x: 0, y: 0, width: left_padding, height: cell.frame.size.height)
left_border.borderWidth = left_padding
let top_border = CALayer()
let top_padding = CGFloat(10.0)
top_border.borderColor = UIColor.white.cgColor
top_border.frame = CGRect(x: 0, y: 0, width: cell.frame.size.width, height: top_padding)
top_border.borderWidth = top_padding
cell.layer.addSublayer(bottom_border)
cell.layer.addSublayer(right_border)
cell.layer.addSublayer(left_border)
cell.layer.addSublayer(top_border)
return cell;
}
希望这对您有所帮助。
我找到了其他答案 unhelpful/incorrect,但在此处的其中一个答案中找到了我需要的内容:
How to set the width of a cell in a UITableView in grouped style
关键是,如果您有自定义单元格(OP 有,大多数应用程序都会有),那么您可以将 setFrame 方法重写为您需要的任何宽度。无需重新设计您的应用或做任何棘手的事情。