我正在尝试设置表的动态高度。但是当我记录表的高度时,它显示的是动态高度,但没有设置为实际表格。
这是我的代码:
CGRect table_frame;
table_frame=table_sender.frame;
NSLog(@"table fram: %f",table_frame.size.height); //got table height 444
float height = [senderHistoryDataArray count] * 40 +40 ; // 4*25.00
NSLog(@"height of table: %f",height); //got this height 200
if(height>=444){
table_frame.size.height=444;
}
else{
table_frame.size.height=height;
NSLog(@"height set"); //also displying this line in log
}
table_sender.frame=table_frame;
[table_sender reloadData];
输出:
当我取消选中自动布局时,它会起作用,但它只显示比以前更多的部分。
答案 0 :(得分:5)
如果您使用的是AutoLayout,则无法设置框架 - 如果您这样做,您将获得行为
Autolayout是将UI组件放置在屏幕上的一种相对方法。 例如,我身后的支架100px和左边界的20px(这里我使用了像素 - 你可以想到米被认为是游乐场)
答案 1 :(得分:0)
设置您需要设置的行的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return rowHt[indexPath.row];
}
每行只有在
处设置时才能有不同的高度heightForRowAtIndexPath
为此您需要从
中选择相应的行indexPath.row
如果您从代码中设置tabelView,它将看起来像这样
@property(nonatomic, strong) UITableView *table_sender;
self.table_sender = [[UITableView alloc] initWithFrame:frameTable style:UITableViewStylePlain] ;
self.table_sender.dataSource = self;
self.table_sender.delegate = self;
其中rowHt是每行
的高度集合数组答案 2 :(得分:0)
我认为必须有一些其他代码更改tableView的框架。
使用KVO检测UITableView
的帧的变化。
1,在你viewDidLoad
方法
[table_sender addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil] ;
2,实现observeValueForKeyPath
方法并在其中添加断点。当断点停止时,检查调用堆栈以找到更改帧的人。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"frame"]) {
NSLog(@"%@", change) ; // add an breakpoint here
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context] ;
}
}