gpt4 book ai didi

ios - UITableViewAutomaticDimension 引起的问题

转载 作者:行者123 更新时间:2023-11-29 01:38:44 25 4
gpt4 key购买 nike

我正在制作一个带有文本帖子的应用程序,但我意识到很多文本帖子会很长,所以我添加了一个显示全部和更少按钮,但是当你按下它时,有时单元格会消失,你向上滚动然后它跳到单元格的中间。这是它的样子,因为它很难解释......

http://makeagif.com/kMFG-g

我相信这是由于某些原因而发生的...

table.rowHeight = UITableViewAutomaticDimension

但有必要使单元格显示自定义数量的文本。但无论如何,这是代码。

这是实现它的实际函数......

var showingMore = [Bool]()

func showAllAndLess(sender: AnyObject) {

var buttonPosition: CGPoint = sender.convertPoint(CGPointZero, toView: self.table)

var indexPath: NSIndexPath = self.table.indexPathForRowAtPoint(buttonPosition)!

if showingMore[indexPath.row] {
sender.setTitle("Show Less", forState: .Normal)
} else {
sender.setTitle("Show All", forState: .Normal)
}

showingMore[indexPath.row] = !showingMore[indexPath.row]

table.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}

这是 cellForRowAtIndexPath 方法中的代码...

showingMore.append(false)

postCellObj.showAllAndLessButton.hidden = true

if showingMore[indexPath.row] {
postCellObj.message.text = messageString
postCellObj.showAllAndLessButton.setTitle("Show Less", forState: .Normal)
postCellObj.showAllAndLessButton.hidden = false
println("Showing Less")
}

else if count(messageString) >= 800 {
var messageNs = messageString as NSString
var messageFinal = messageNs.substringWithRange(NSRange(location: 0, length: 800))
postCellObj.message.text = messageFinal as String + "..."
postCellObj.showAllAndLessButton.setTitle("Show All", forState: .Normal)
postCellObj.showAllAndLessButton.hidden = false

} else {
postCellObj.message.text = messageString

}

}

感谢阅读!我希望我提供了足够的信息。如果您需要更多,请说些什么。 (:

附言变量“messageString”是消息文本。

最佳答案

这是一个已知问题。如果您修改数据源(添加或删除行),UITableView 会转储之前计算的单元格高度。当您向下滚动时这没有问题,但是一旦您开始向上滚动, TableView 就会开始跳跃。

解决方案是自己缓存单元高度。更多信息:https://github.com/smileyborg/TableViewCellWithAutoLayoutiOS8/issues/17

有时,跳跃滚动可能是由于单元格高度的错误估计造成的(如果偏离了一个数量级)。在这种情况下,您可以根据文本量调整您的估计(但不需要非常精确)。

这是一种估计文本高度的方法:

class func estimatedHeightForText(text: String, andWidth width: CGFloat) ->  CGFloat {
let paragraphCount = (text.characters.split { $0 == "\n" }.map { String($0) }).count + 1

// 7 is approximate width of character in points
let charsPerLine = width / 7
let lineCount = text.characters.count / Int(round(charsPerLine)) + 1

// 14 is approximate height of line
let estimatedHeight = 14 * CGFloat(max(lineCount, paragraphCount))

return estimatedHeight
}

关于ios - UITableViewAutomaticDimension 引起的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com