我试图在每个表格单元格中显示一个文本字段。问题是我似乎无法使UITableViewCell足够高以适应整个TextView。 UITableViewCell不需要是动态的,因为数据在视图的加载下被加载到UITextView中。
这是我的代码:
//
// chatViewController.swift
// collaboration
//
// Created by nick on 11/21/15.
// Copyright © 2015 Supreme Leader. All rights reserved.
//
import UIKit
class chatViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var testLabel: UILabel!
var messages: NSMutableArray = NSMutableArray()
var authors: NSMutableArray = NSMutableArray()
func tableView(tableView: UITableView, numberOfRowsInSection Section: Int) -> Int {
return self.authors.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! chatTableViewCell
cell.authorLabel?.text = self.authors.objectAtIndex(indexPath.row) as? String
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
let receivedUsername = NSUserDefaults.standardUserDefaults().stringForKey("usernameToMessageWith")
testLabel.text = "\(receivedUsername! as String)"
authors.addObject("")
authors.addObject("You:")
CGRect frame = messagesTextView.frame;
frame.size = messagesTextView.contentSize;
messagesTextView.frame = frame;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我完全不知道如何去做这件事。请不要因为我可怜的搞砸范围尝试取笑我。
答案 0 :(得分:2)
如果您使用的是textField,则必须以编程方式计算高度,并在显示单元格时进行设置。如果它不可编辑,但您可以使用UILabel执行以下操作。
在viewDidLoad
设置tableView.estimatedRowHeight = <expected height>
和tableView.rowHeight = UITableViewAutomaticDimension
在自定义单元格中,您需要将UILabel顶部和底部的布局约束设置为contentView的边缘,并将UILabels lines
设置为0
textfield的可能解决方法:
同时使用文本字段和UILabel,并将UILabels文本颜色设置为清除颜色。这样您就可以使用UILabel来调整高度,但仍然具有文本字段的功能。
答案 1 :(得分:1)
代码
tableView.estimatedRowHeight = <expected height>
tableView.rowHeight = UITableViewAutomaticDimension
仅适用于 iOS&gt; = 8
如果您想使代码与 iOS 7.x 兼容,您也可以尝试下面的代码
如果文本不可编辑,建议使用 UILabel 而不是textview或textfield。以下是使用 UILabel 计算高度的解决方法。
提供您正在使用的字体名称以及使用的字体大小完全相同。你保留的。
func requiredHeight(text:String) -> CGFloat{
let font = UIFont(name: "Helvetica", size: 16.0)
let label:UILabel = UILabel(frame: CGRectMake(0, 0, 200, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height + //Add some space as a part of your bottom and top constraint
}
假设您的标签的顶部和底部约束分别为10和10,它们将return语句设为:
return label.frame.height + 20
在 heightForRowAtIndex 中调用此方法,并将文本作为参数传递给那里。它将根据计算返回动态高度。
编辑
如何使用
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return requiredHeight("Your text")
}