表视图单元格未显示分配给属性的字符串是否太长

时间:2017-04-20 04:51:01

标签: ios swift uitableview tableviewcell uitableviewautomaticdimension

我正在构建一个应用程序,让用户创建一个由标题和文本组成的“故事”。

我正在实现一个显示所有已创建故事的tableView。到目前为止一切正常。但这是我的问题:

当用户输入的标题或文本比tableViewCell能够显示的更长时,该单元格根本不会显示。 其他名字较短的人仍然会这样做。

我正在使用单元格样式“副标题”。

如何限制单元格中显示的文本数量以及导致此错误的原因?因为即使我找到了修复它的方法,文本仍可能存在问题跑出屏幕。

以下是我的UITableViewController课程中的代码:

class StoryTableViewController: UITableViewController {


override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return savedStories.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)

    cell.textLabel?.text = savedStories[indexPath.row].title
    cell.detailTextLabel?.text = savedStories[indexPath.row].text
    return cell
}

override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

以下是界面构建器的UI截图:

Here is a screenshot of the UI from the interface builder

3 个答案:

答案 0 :(得分:1)

您需要创建自定义UITableViewCell。您可以使用可用的动态可调整大小单元格自动调整单元格到文本长度。

IB步骤: 在单元格上制作UILabel。不要给它任何高度限制。只需从各个方面将其固定下来并执行以下操作:

label.numberOfLines = 0

在viewDidLoad中:

self.tableView.estimatedRowHeight = 88.0 //Any estimated Height
self.tableView.rowHeight = UITableViewAutomaticDimension

不要编写heightForRow:方法,但如果由于存在多个单元格而要使用它,则可以为该特定单元格高度返回UITableViewAutomaticDimension。

试试这个out

答案 1 :(得分:1)

您必须实现这两个委托,不要忘记将tableView委托和数据源与VC绑定,并从故事板中设置标签描述属性numberOfLines = 0

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
     return 60; // height of default cell
 }

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension; // It takes automatic height of cell
}

现在在故事板中执行以下操作

您的视图层次结构应该是这样的

enter image description here

仅查看ViewLabelContatainer

添加视图并将所有标签放入其中。

标签容器约束

enter image description here

标签标题约束

enter image description here

标签说明约束

enter image description here

  

<强>输出

enter image description here

答案 2 :(得分:0)

为此你需要使用可变高度的TableViewCell

override func viewDidLoad() 
{  
    super.viewDidLoad()

    self.tableView.estimatedRowHeight = 200 // give maximum height you required
    self.tableView.rowHeight = UITableViewAutomaticDimension
}

然后在视图控制器中添加此委托方法

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{
    return UITableViewAutomaticDimension
}