为啥 UITableViewCell 宽度小于 UITableView 宽度
Posted
技术标签:
【中文标题】为啥 UITableViewCell 宽度小于 UITableView 宽度【英文标题】:Why is UITableViewCell width less than UITableView width为什么 UITableViewCell 宽度小于 UITableView 宽度 【发布时间】:2016-03-31 11:09:14 【问题描述】:我正在尝试以编程方式创建 UITableView。我的单元格宽度有问题,它固定在 320,而表格宽度对于 iphone 6 是 375,对于 iphone 6 plus 是 414
如何使单元格宽度等于表格宽度?
查看类:
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource
override func viewDidLoad()
super.viewDidLoad()
let myTableView = UITableView(frame: self.view.frame)
myTableView.delegate = self
myTableView.dataSource = self
view.addSubview(myTableView)
// Do any additional setup after loading the view, typically from a nib.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell:customTableViewCell = customTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "mycell")
cell.backgroundColor = UIColor.blueColor()
print("tableView width is \(tableView.frame.size.width)")
return cell
自定义单元格类:
import UIKit
class customTableViewCell: UITableViewCell
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
configureView()
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)!
configureView()
func configureView()
print("cell width is \(self.frame.size.width)")
print("cell bounds is \(self.contentView.frame.width)")
let locationLabel = UILabel()
locationLabel.frame = CGRectMake(0, 0 , self.frame.size.width,self.frame.size.height )
locationLabel.text = "custom cell"
locationLabel.backgroundColor = UIColor.blackColor()
self.addSubview(locationLabel)
// add and configure subviews here
运行代码时的结果:
单元格宽度为 320.0 单元格边界为 320.0 tableView 宽度为 414
screenshot
我正在使用 Xcode 7.3、Swift 2.2、ios 9.3
【问题讨论】:
检查这个...***.com/questions/26519248/… 我尽可能快地重写了它,没有任何改变 在快速检查中还有另一个答案...检查所有答案 你在哪里设置单元格的宽度?在您的代码中看不到。 在我发布的代码中我没有在任何地方设置它,我尝试在 cellForRowAtIndexPath 中设置它。 【参考方案1】:也许你应该明确设置单元格的宽度,它现在有一个默认大小:
编辑
更改您的单元格类别:
import UIKit
class customTableViewCell: UITableViewCell
var locationLabel: UILabel = UILabel()
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
configureView()
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)!
configureView()
func configureView()
print("cell width is \(self.frame.size.width)")
print("cell bounds is \(self.contentView.frame.width)")
locationLabel.text = "custom cell"
locationLabel.textColor = UIColor.whiteColor()
locationLabel.backgroundColor = UIColor.blackColor()
self.addSubview(locationLabel)
// add and configure subviews here
在 VC 中编辑:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell:customTableViewCell = customTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "mycell")
cell.backgroundColor = UIColor.blueColor()
cell.frame = CGRectMake(0, 0, tableView.frame.size.width, cell.frame.size.height)
cell.locationLabel.frame = cell.frame
print("cell width in cellForRowAtIndexPath is \(cell.frame.size.width)")
print("tableView width is \(tableView.frame.size.width)")
return cell
输出:
cell width is 320.0
cell bounds is 320.0
cell width in cellForRowAtIndexPath is 414.0
tableView width is 414.0
【讨论】:
我尝试将宽度设置为表格视图类中的单元格框架、边界、内容视图。大小保持 320。 感谢@schmidt9,您的回答很好地解决了我遇到的问题。 @DanTImofte 如果有帮助请标记为答案 我已经投票了,当我有足够的声望时它会出现。以上是关于为啥 UITableViewCell 宽度小于 UITableView 宽度的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UITableViewCell.layoutSubviews() 的 frame.width 为 600(通用故事板宽度)而不是 320(特定 iPhone 设备)?
我在披露指标中看到了双 V 形。为啥以及如何解决这个问题? [关闭]