在ios 5之前,我会在这样的tableview中设置行高:
self.tableView.rowHeight=71;
但是,它在iOS5上不起作用。
有人有想法吗?
由于
答案 0 :(得分:18)
您是否尝试过tableView:heightForRowAtIndexPath:
的{{1}}?
您可以在UITableViewDelegate
代表(支持tableView:heightForRowAtIndexPath:
协议的代理人)中实施UITableView
,将行高设置为71.
UITableViewDelegate
首先,您应该设置tableView的委托。代表应符合- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 71.0;
}
协议。假设我们有一个UITableViewDelegate
类。为了符合TableDelegate
协议,应该在它的声明中将它放在方括号中:
UITableViewDelegate
然后设置委托:
...
@interface TableDelegate : UIViewController <UITableViewDelegate>
...
or
@interface TableDelegate : UIViewController <some_other_protocol, UITableViewDelegate>
最后,您应该在...
// create one first
TableDelegate* tableDelegate = [[TableDelegate alloc] init];
...
self.tableView.delegate = tableDelegate;
实施中实施tableView:heightForRowAtIndexPath:
方法:
TableDelegate
只是澄清一点,使用@implementation TableDelegate
...
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 71.0;
}
...
@end
应该可以正常工作,并且比rowHeight
返回的常量更好,正如Javier Soto在评论中指出的那样。另请注意,如果您的UITableView在-tableView:heightForRowAtIndexPath:
和-tableView:heightForRowAtIndexPath:
属性集中具有委托返回高度,则会接受先前值。
答案 1 :(得分:3)
我为iOS 5编码,它确实有效。您只需要实现您在以下所述的行:
- (void)viewDidLoad
之后的
方法
[super viewDidLoad];
在:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
如果TableView为空,方法不起作用。但是如果使用rowHeight属性,即使视图为空,它也会起作用。
答案 2 :(得分:1)
此方法更改行的高度
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
return 51.0f
};
答案 3 :(得分:0)
尝试在 rowHeight
之前设置viewWillAppear:
,例如在创建表格视图后立即。
这使它适用于iOS 5.在iOS 6上它更容易:你可以在任何地方设置它。
正如其他人所指出的,使用rowHeight
的优势在于您可以避免tableView:heightForRowAtIndexPath:
对性能的影响。