UiTableViewCell 动态高度适用于 iphone 而不是 ipad 大小类

Posted

技术标签:

【中文标题】UiTableViewCell 动态高度适用于 iphone 而不是 ipad 大小类【英文标题】:UiTableViewCell Dynamic height works on iphone not ipad size class 【发布时间】:2015-07-23 16:28:57 【问题描述】:

所以基本上我有用于 iPhone 的 any any size 类和用于 iPad 的常规常规类。话虽如此,我有一个自定义的UITableViewCell,并且我有 iPhone 的单元格自动调整大小。我垂直布置了约束,以帮助它知道单元格的大小。

问题出在 iPad 尺寸类上,我正在做同样的事情,显然布局有点不同,但我检查了每个元素,它有顶部和底部以及高度限制,但 UITableViewCell 一样高作为 iPhone 布局。

这是我的那个场景的代码:

import UIKit

class TruckListMainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

var truckNames = ["This Truck Test"]
var truckImages = ["default-truck.png"]
var oneAverages = ["5.02"]
var twoAverages = ["6.02"]
var threeAverages = ["7.02"]
var fourAverages = ["8.02"]
var oneLabels = ["30 Day MPG"]
var twoLabels = ["60 Day MPG"]
var threeLabels = ["90 Day MPG"]
var fourLabels = ["Lifetime MPG"]

@IBOutlet weak var truckListTable: UITableView!
@IBOutlet weak var openMenu: UIBarButtonItem!

override func viewDidLoad() 
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    self.truckListTable.rowHeight = UITableViewAutomaticDimension
    self.truckListTable.estimatedRowHeight = 200.0

    openMenu.target = self.revealViewController()
    openMenu.action = Selector("rightRevealToggle:")

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    self.view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer())


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.


func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    return truckNames.count



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! truckList

    // Configure the cell...
    cell.truckName.text = truckNames[indexPath.row]
    cell.truckImage.image = UIImage(named: truckImages[indexPath.row])
    cell.averageOne.setTitle(oneAverages[indexPath.row], forState: UIControlState.Normal)
    cell.averageTwo.setTitle(twoAverages[indexPath.row], forState: UIControlState.Normal)
    cell.averageOne.setTitle(threeAverages[indexPath.row], forState: UIControlState.Normal)
    cell.averageOne.setTitle(fourAverages[indexPath.row], forState: UIControlState.Normal)
    cell.labelOne.setTitle(oneLabels[indexPath.row], forState: UIControlState.Normal)
    cell.labelTwo.setTitle(twoLabels[indexPath.row], forState: UIControlState.Normal)
    cell.labelThree.setTitle(threeLabels[indexPath.row], forState: UIControlState.Normal)
    cell.labelFour.setTitle(fourLabels[indexPath.row], forState: UIControlState.Normal)
    return cell


func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) 

    cell.backgroundColor = UIColor.clearColor()

    if indexPath.row % 2 == 0 

        cell.backgroundColor = UIColor(red: 202/255.0, green: 202/255.0, blue: 202/255.0, alpha: 1)
     else 

        cell.backgroundColor = UIColor(red: 240/255.0, green: 240/255.0, blue: 240/255.0, alpha: 1)
    





/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.

*/


任何帮助将不胜感激,我不会在这里发帖,但我已经为这个问题苦苦挣扎了将近 2 天。如果我可以发布图片,我知道这将有助于了解限制。

【问题讨论】:

【参考方案1】:

我检查了每个元素,它有一个顶部、底部和高度约束,但 UITableViewCell 与 iPhone 布局一样高

您可能对如何确定像元高度感到困惑。如果您不希望单元格高度由内部约束确定,则需要将表格视图的 rowHeight 属性设置为某个实际数字(不是 UITableViewAutomaticDimension)。

【讨论】:

是的,我一定很困惑。我想如果你有一系列垂直约束和高度,那么单元格将确定它自己的高度。这就是我想要做的,我错了吗? 我用过这个:if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad self.truckListTable.rowHeight = 200.0 else self.truckListTable.rowHeight = UITableViewAutomaticDimension self.truckListTable.estimatedRowHeight = 200.0 但我很乐意根据限制来做这个,而不是为 ipad 设置高度。 我想通了,我一直有这两行,当我读了几次你的答案时,我突然意识到我正在做这两行。我删除了这两行,现在一切正常,谢谢!

以上是关于UiTableViewCell 动态高度适用于 iphone 而不是 ipad 大小类的主要内容,如果未能解决你的问题,请参考以下文章

扩展/收缩 UITableViewCell 高度不再适用于 iOS7

UITableViewcell autolayout下动态高度

UITableViewCell 中的多行 UILabel 在 iOS8 中使用 autoLayout 给出错误的高度

iOS + Swift 2:UITableViewCell 中的动态高度不适用于空视图

如何基于多视图配置动态UITableViewCell的高度

具有自动布局的自定义单元格的动态高度