Ios UILabel无法立即获取内容
我正在使用UITableViewAutomaticDimension使我的TableViewCells自动调整大小以适应内容。如果我在第一个单元格中有多行文本,它将采用正确的高度,但只显示第一行内容,直到我向下滚动并向上滚动 该标签在情节提要中配置为: 初始荷载: 滚动后: 视图显示:Ios UILabel无法立即获取内容,ios,swift,uitableview,Ios,Swift,Uitableview,我正在使用UITableViewAutomaticDimension使我的TableViewCells自动调整大小以适应内容。如果我在第一个单元格中有多行文本,它将采用正确的高度,但只显示第一行内容,直到我向下滚动并向上滚动 该标签在情节提要中配置为: 初始荷载: 滚动后: 视图显示: override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) self.tableView!.esti
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.tableView!.estimatedRowHeight = 250
self.tableView!.rowHeight = UITableViewAutomaticDimension
ProgressHUD.show("Loading...", interaction: false)
let API = postAPI()
API.getNew() {
(result: [Post]?) in
ProgressHUD.dismiss()
if let ps = result {
if self.posts.count != ps.count {
self.posts.removeAll()
self.posts.appendContentsOf(ps)
self.tableView.reloadData()
}
} else {
ProgressHUD.showError("There was a problem getting new posts")
}
}
}
CellForRowAtIndexPath:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("OMCFeedCell", forIndexPath: indexPath) as! OMCFeedTableViewCell
let p = posts[indexPath.row]
cell.selectionStyle = .None
let data = p.content!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let content = try! JSON(NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers))
if let image = content["image"].string {
let uploads = uploadAPI()
uploads.tryGetImage(image) {
(result: UIImage?) in
if let i = result {
cell.postImage.contentMode = .ScaleAspectFit
cell.postImage.image = i
}
}
}
cell.postText.text = ""
if let text = content["text"].string {
cell.postText.text = text
}
return cell
}
投票限制:
您需要确保在主线程中进行UI更新。我怀疑您的API.getNew()调用似乎是异步的,并且可能会在辅助线程中回调该块?(我只是在猜测)。以确保UI更新在主线程中进行。对代码进行此更改-
API.getNew() {
(result: [Post]?) in
//Ensure to run UI updates in main thread. The ProgressHUD.dismiss(),
//self.tableView.reloadData() must be run in main thread..
dispatch_async(dispatch_get_main_queue(),{
if let ps = result {
ProgressHUD.dismiss()
if self.posts.count != ps.count {
self.posts.removeAll()
self.posts.appendContentsOf(ps)
self.tableView.reloadData()
}
} else {
ProgressHUD.showError("There was a problem getting new posts")
}
})
}
类似地,请注意代码中的这种模式,并确保不从辅助线程运行UI更新。您需要确保UI更新发生在主线程中。我怀疑您的API.getNew()调用似乎是异步的,并且可能会在辅助线程中回调该块?(我只是在猜测)。以确保UI更新在主线程中进行。对代码进行此更改-
API.getNew() {
(result: [Post]?) in
//Ensure to run UI updates in main thread. The ProgressHUD.dismiss(),
//self.tableView.reloadData() must be run in main thread..
dispatch_async(dispatch_get_main_queue(),{
if let ps = result {
ProgressHUD.dismiss()
if self.posts.count != ps.count {
self.posts.removeAll()
self.posts.appendContentsOf(ps)
self.tableView.reloadData()
}
} else {
ProgressHUD.showError("There was a problem getting new posts")
}
})
}
同样,请注意代码中的这种模式,并确保不从辅助线程运行UI更新。您能在
单元格中显示代码吗?您的故事板中的标签是如何配置的?@Paulw11我添加了相关的代码和配置选项认为他们想要查看约束条件。@beyowulf也添加了这些约束条件。postImage是什么?它的约束条件是什么?您能在单元格中显示代码吗?您的故事板中的标签是如何配置的?@Paulw11我添加了相关的代码和配置选项认为他们想要查看约束条件。@beyowulf也添加了这些约束条件。postImage是什么?它的限制条件是什么?它修复了模拟器中的代码,但没有修复硬件iPhone上的代码。奇怪!请注意,我的sim卡在iOS 9上,iPhone在iOS 8上。我最终发现,在从cellForRowAtIndexPath返回之前,我需要添加cell.LayoutFneed()。终于在iOS 8上解决了这个问题!这修复了模拟器中的代码,但没有修复硬件iPhone上的代码。奇怪!请注意,我的sim卡在iOS 9上,iPhone在iOS 8上。我最终发现,在从cellForRowAtIndexPath返回之前,我需要添加cell.LayoutFneed()。终于在iOS 8上解决了这个问题!