UITableViewCells初始加载视图/显示问题

时间:2015-03-25 18:39:29

标签: ios xcode uitableview swift

所以我有一个UITableView加载了许多引号列。进入显示此数据的UITableView后,单元格似乎最初没有正确加载,文本看起来真的被压扁和/或切断,大约1/2秒后,它正确加载,一切正常。

每次加载表格视图时都会发生这种情况。

例如:

enter image description here

.estimatedrowheight...or is it because the view cannot load the data into the UITableView`的问题是否足够快?我尝试修改行高无效。

修改

当我明确地设置这样的高度 -

captionsTableView.rowHeight = 80

它工作得很好......就像在单元格中加载高度为80个点一样,没有初始加载毛刺。

但使用captionsTableView.rowHeight = UITableViewAutomaticDimension     并captionsTableView.estimatedRowHeight = 80.0打破它

编辑2 - 代码

class CaptionsController: UIViewController, UITableViewDelegate, UITableViewDataSource  {

  @IBOutlet weak var captionSegment: UISegmentedControl!
  @IBOutlet weak var captionText: UINavigationItem!
  @IBOutlet weak var captionSearchBar: UISearchBar!
  @IBOutlet weak var captionsTitle: UILabel!
  var receiveImage:UIImage!
  //var receiveCategoryText:String!
  //var firstNameCell: UITableViewCell = UITableViewCell()
  //var firstNameText: UITextField = UITextField()
  var model:ModelData!
  let tapRec = UITapGestureRecognizer()
  var currentCell: UITableViewCell!
  var fav: String!
  let basicCellIdentifier = "CustomCells"
  @IBOutlet weak var captionsTableView: UITableView!
  var c: CustomCells!
  var captionJSON: JSON = nil

  override func viewDidLoad() {
    super.viewDidLoad()
    model = (self.tabBarController as CaptionTabBarController).model
    captionJSON = model.quoteSelection()
    captionText.title = model.categoryName
    captionsTableView.delegate = self
    captionsTableView.dataSource = self
    self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "CherrySwash-Regular", size: 25)!,  NSForegroundColorAttributeName: UIColor(red:0.0/255.0, green: 159.0/255.0, blue: 172.0/255.0, alpha: 1.0)]
    configureTableView()
    captionsTableView.reloadData()
    tapRec.numberOfTapsRequired = 2
    tapRec.addTarget(self, action: "tappedView")
    self.view.addGestureRecognizer(tapRec)
    self.view.userInteractionEnabled = true
  }

  func configureTableView() {
    captionsTableView.rowHeight = UITableViewAutomaticDimension
    captionsTableView.estimatedRowHeight = 80.0
  }

  override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    //deselectAllRows()
    //captionsTableView.reloadData()
  }

  override func viewDidAppear(animated: Bool) {
    captionsTableView.reloadData()
  }

  func deselectAllRows() {
    if let selectedRows = captionsTableView.indexPathsForSelectedRows() as? [NSIndexPath] {
      for indexPath in selectedRows {
        captionsTableView.deselectRowAtIndexPath(indexPath, animated: false)
      }
    }
  }

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

  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    return customCellAtIndexPath(indexPath)
  }

  func customCellAtIndexPath(indexPath:NSIndexPath) -> CustomCells {
    var cell = captionsTableView.dequeueReusableCellWithIdentifier(basicCellIdentifier) as CustomCells
    setTitleForCell(cell, indexPath: indexPath)
    setSubtitleForCell(cell, indexPath: indexPath)
    setImageForCell(cell, indexPath: indexPath)
    return cell
  }

  func setTitleForCell(cell:CustomCells, indexPath:NSIndexPath) {
    let item = captionJSON[indexPath.row]["quote"] 
    cell.mainLabel.text = item.stringValue
  }

  func setSubtitleForCell(cell:CustomCells, indexPath:NSIndexPath) {
    let item = captionJSON[indexPath.row]["author"]
    cell.creditLabel.text = item.stringValue
  }

  func setImageForCell(cell:CustomCells, indexPath:NSIndexPath) {
    //let item = Array(Array(model.quoteItems.values)[indexPath.row])[1] as? String
    //if (item == "fav") {
      //cell.favImgView.image = UIImage(named: "icon-heart-fav")!
    //} else {
      cell.favImgView.image = UIImage(named: "icon-heart")!
    //}
  }

  func tappedView(){
    //need to add filled icon, as well as logic to not change image upon select of favorited cell
    var image : UIImage = UIImage(named: "icon-heart-fav")!
    c.favImgView.image = image
  }

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    c = captionsTableView.cellForRowAtIndexPath(indexPath) as CustomCells
    var captiontabBar:CaptionTabBarController = CaptionTabBarController()
    model.quote = c.mainLabel.text!
    model.author = c.creditLabel.text!

    println(" quote!!! " + model.quote)

    self.tabBarController?.selectedIndex = 0

    //let secondViewController:SelectionsController = SelectionsController()

    //self.presentViewController(secondViewController, animated: true, completion: nil)

    //let returnController = self.storyboard!.instantiateViewControllerWithIdentifier("selections") as? UIViewController
    //self.presentViewController(returnController!, animated: true, completion: nil)


    /*for tempCell: UITableViewCell in tableView.visibleCells() as [UITableViewCell] {
      var image : UIImage = UIImage(named: "icon-heart")!
      tempCell.imageView?.image = image
    }

    var image : UIImage = UIImage(named: "icon-heart-overview")!
    c.favImgView?.image = image*/
  }

}

class CustomCells: UITableViewCell {
  @IBOutlet var mainLabel: UILabel!
  @IBOutlet var creditLabel: UILabel!
  @IBOutlet var favImgView: UIImageView!
}

1 个答案:

答案 0 :(得分:1)

在(void)viewWillAppear:

中添加您的代码

看起来你在viewDidload中这样做了。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (![self.p_tableView respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)])
    {
        self.p_tableView.rowHeight = UITableViewAutomaticDimension;
        self.p_tableView.estimatedRowHeight = 100.0f;
    }
}