所以我有一个UITableView
加载了许多引号列。进入显示此数据的UITableView
后,单元格似乎最初没有正确加载,文本看起来真的被压扁和/或切断,大约1/2秒后,它正确加载,一切正常。
每次加载表格视图时都会发生这种情况。
例如:
.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!
}
答案 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;
}
}