未设置表的动态高度

时间:2014-01-10 08:43:33

标签: ios iphone uitableview ios7

我正在尝试设置表的动态高度。但是当我记录表的高度时,它显示的是动态高度,但没有设置为实际表格。

这是我的代码:

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];

输出: enter image description here

当我取消选中自动布局时,它会起作用,但它只显示比以前更多的部分。 enter image description here

3 个答案:

答案 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] ;
    }
}