Ios UILabel无法立即获取内容

Ios UILabel无法立即获取内容,ios,swift,uitableview,Ios,Swift,Uitableview,我正在使用UITableViewAutomaticDimension使我的TableViewCells自动调整大小以适应内容。如果我在第一个单元格中有多行文本,它将采用正确的高度,但只显示第一行内容,直到我向下滚动并向上滚动 该标签在情节提要中配置为: 初始荷载: 滚动后: 视图显示: override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) self.tableView!.esti

我正在使用UITableViewAutomaticDimension使我的TableViewCells自动调整大小以适应内容。如果我在第一个单元格中有多行文本,它将采用正确的高度,但只显示第一行内容,直到我向下滚动并向上滚动

该标签在情节提要中配置为:

初始荷载:

滚动后:

视图显示:

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上解决了这个问题!