コンテンツが他のセルと異なる場合があるセルを持っています(他のセルのプロパティは同じです)。この場合はペン先がうまくいくが、高さが動的なセルを持つカスタムビューを使用して問題にぶつかります。IBのuitableviewcellでカスタムビューを使用する動的な高さで
絵コンテ:
はこのように実装のUITableViewとカスタムUITableViewCellの、MessageTableViewCell、とのUIViewControllerです:View ControllerのcellForRowAtIndexPathメソッドで
class MessageTableViewCell: UITableViewCell {
@IBOutlet weak var avatar: UIImageView!
@IBOutlet weak var initials: UILabel!
@IBOutlet weak var timestamp: UILabel!
@IBOutlet weak var messageView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
、私はにしようメッセージビュー(ビューコントローラのセルの白いボックス)からフレームを使用して、xibに裏打ちされたUIViewをインスタンス化します。
カスタムビュー:
それは実装です:
クラスMessageView:NibLoadingView {
@IBOutlet weak var message: UILabel!
}
NibLoadingView実装: (クレジット:https://stackoverflow.com/a/40051928/4096655)
class NibLoadingView: UIView {
weak var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
nibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
nibSetup()
}
private func nibSetup() {
backgroundColor = .clear
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.translatesAutoresizingMaskIntoConstraints = true
addSubview(view)
}
private func loadViewFromNib() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let nibView = nib.instantiate(withOwner: self, options: nil).first as! UIView
return nibView
}
}
行の実装のためのセルは:
ショートストーリーは、私は通常、異なる検討すると何の間にいくつかの共通の特性を共有したいです:中
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell") as? MessageTableViewCell else {
return UITableViewCell()
}
let frame = cell.messageView.frame
let messageView = MessageView(frame: frame)
messageView.message.text = messages[indexPath.row]
cell.addSubview(messageView)
return cell
}
結果相互に異なるセルの部分のカスタムビューを作成しようとしていますが、その中には動的な高さがあります。読んでくれてありがとう。
重要な点は、MessageViewは他のビューと互換性があることです。それ以外の場合は、必要なセルの種類ごとにIBですべてを実行します。 –
@thefredelement次に、正しい制約を 'MessageView'内のラベルに追加し、セルの高さが動的に増加するように' tableView(_:estimatedHeightForRowAt:) 'を呼び出します。 –