Я запрограммировал UITableViews раньше несколько раз.Я действительно не вижу, что не так с тем, что я делаю.Я добавляю UILabels к представлению, но я думаю, что они добавляются с размером относительно размера ячейки по умолчанию UITableView.Когда я опускаю heightForRowAt, верхний и нижний текст представления находится примерно в верхней и нижней части ячейки, поэтому я думаю, что что-то происходит с функцией heightForRowAt, и высота не передается моему подклассу.Кроме того, я устанавливаю выравнивание текста по правым сторонам надписей, и это тоже не работает.
Вот как выглядит моя таблица
Когда я не реализую heightForRowAt
Я также опубликую здесь важные части кода.Возможно, есть проблема, которую я не вижу.
override init(frame: CGRect) {
super.init(frame:frame)
let tblViewFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
tableView = UITableView(frame: tblViewFrame, style: .plain)
tableView.delegate = self
tableView.dataSource = self
tableView.register(FeedViewCell.self, forCellReuseIdentifier: feedCellID)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->
UITableViewCell {
return tableView.dequeueReusableCell(withIdentifier: feedCellID, for: indexPath)
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//not going to be this big, just for testing
return CGFloat(100)
}
Также я почти уверен, что моя математика CGRect верна, потому что я переделал ее множеством способов, и она никогда не работала.Для UITableViewCell я добавил UIView в качестве подпредставления с текстом внутри него.Любая помощь будет оценена
import Foundation
import UIKit
class FeedViewCell:UITableViewCell {
var titleLabel:UILabel!
var subtitleLabel:UILabel!
var topRightLabel:UILabel!
var bottomRightLabel:UILabel!
var innerView:UIView!
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style:style, reuseIdentifier:reuseIdentifier)
formatCell()
}
func formatCell() {
backgroundColor = colorSet.sideViewBackgroundColor
createLabels()
formatLabels()
print(frame.height)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func formatLabels() {
//titleLabel
titleLabel.text = "Top Left"
titleLabel.font = fontSet.feedViewTitleFont
//subtitleLabel
subtitleLabel.text = "Bottom Left"
//topRightLabel
topRightLabel.text = "Top Right"
topRightLabel.textAlignment = .right
//bottomRightLabel
bottomRightLabel.text = "Bot Right"
bottomRightLabel.textAlignment = .right
}
func createLabels() {
//Space so stuff doesn't touch edges
let bufferSpace = CGFloat(0)
let horDelim = self.frame.width * CGFloat(0.75)
let verDelim = self.frame.height * CGFloat(0.5)
let tlRect = CGRect(x: bufferSpace, y: bufferSpace, width: horDelim - bufferSpace, height: verDelim - bufferSpace)
let trRect = CGRect(x: horDelim, y: bufferSpace, width: self.frame.width - horDelim - bufferSpace, height: self.frame.height - verDelim - bufferSpace)
let blRect = CGRect(x: bufferSpace, y: verDelim, width: horDelim - bufferSpace, height: self.frame.height - verDelim - bufferSpace)
let brRect = CGRect(x: horDelim, y: verDelim, width: self.frame.width - horDelim - bufferSpace, height: self.frame.height - verDelim - bufferSpace)
innerView = UIView(frame: CGRect(x: 0, y: 0, width: frame.width, height: frame.height))
titleLabel = UILabel(frame: tlRect)
subtitleLabel = UILabel(frame: blRect)
topRightLabel = UILabel(frame: trRect)
bottomRightLabel = UILabel(frame: brRect)
innerView.addSubview(titleLabel)
innerView.addSubview(subtitleLabel)
innerView.addSubview(topRightLabel)
innerView.addSubview(bottomRightLabel)
addSubview(innerView)
}
}