【问题标题】:iPhone + UITableView + row heightiPhone + UITableView + 行高
【发布时间】:2010-12-10 18:48:21
【问题描述】:

我正在使用以下代码设置UITableView 的行高

[tableView setRowHeight: 100.00];

我在UITableView 中使用单行作为分隔符。

即使设置了上面的高度,行的高度也不会改变。

【问题讨论】:

  • 设置行高时很重要

标签: iphone uitableview height row


【解决方案1】:

我就是这样做的,这里tableobj 在我的应用程序中只是UITableView 对象。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [tableObj setRowHeight:100.0f];
}

或在numberOfRowsInSection: 中处理类似:

- (NSInteger)tableView:(UITableView *)tblView numberOfRowsInSection:(NSInteger)section {
    [tableObj setRowHeight:100.0f];
    return [soandso count]; // soandso is my object
}

因为在设置数据源之前设置了rowHeight。它对我有用(对于相同的行高)。

【讨论】:

    【解决方案2】:

    你应该实现

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    

    委托方法。并在那里返回 100.0。

    【讨论】:

    • 小心。 Pratik 没有说他想要每行的高度。行数很多时 heightForRowAtIndexPath 可能会很昂贵。
    • 这是正确但昂贵的答案:有一件事我不明白。为什么Apple坚持要知道RowHeight?为什么不直接从 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 询问行高并从中获取高度?
    • 如果所有单元格的行高相同,设置 rowHeight 比使用这个委托方法效率高很多。
    【解决方案3】:

    如果所有行的高度相似,则应避免使用heightForRowAtIndexPath 并使用rowHeight 属性。根据文档:

    使用 tableView:heightForRowAtIndexPath: 代替 rowHeight 会影响性能。每次显示表视图时,它都会在委托上为其每一行调用 tableView:heightForRowAtIndexPath:,这可能会导致表视图具有大量行(大约 1000 或更多)时出现严重的性能问题。

    在 UITableViewController 子类中可以这样做,例如,在 viewDidAppear 方法中(UITableViewController 有对 tableView 的引用):

    self.tableView.rowHeight = 79.f;
    

    【讨论】:

      【解决方案4】:

      更好更简洁的解决方案是实现委托功能(如果你的 UITableView 有很多行,这可能不是最好的......)。

      另外,认为 UITableVieCell 是 UIView 所以你可以先改变它们的高度......

      代表在 iPhone 开发中非常强大,这里是 UITableViewDelage:

      http://developer.apple.com/iphone/library/documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

      你也可以改变 indentForRow, displayCellForRow, heightForRow,edit stuff.....

      【讨论】:

        【解决方案5】:

        当单元格首次显示时,行高被烘焙到单元格中。

        你在设置数据源之前设置了 UITableView#rowHeight 吗?
        如果没有,请这样做。
        如果由于某种原因你不能,你的另一个选择是在设置行高之后调用 UITableView#reloadData。

        【讨论】:

        • 这为我解决了。设置 rowHeight before 我设置数据源完全解决了这个问题。重新加载数据也是如此。谢谢emp。
        【解决方案6】:

        我不认为UITableView中有这样的方法...

        相反,您可以使用属性 rowHeight...
        尝试, tableView.rowHeight =100;

        【讨论】:

        • 其实在 UITableViewDelegate 里面。
        • 属性只是访问 Getter/Setter 的更简单方法。做tableView.rowHeight = 100,和[tableView setRowHeight:100]完全一样。当你合成属性时,会自动创建 getter/setter。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多