我想为UISearchBar创建建议,所以我添加了UITableView,我希望按内容更改UITableView的高度。
当我收到数据时,我打电话给:
[self.searchTableView reloadData];
并在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
中我试图调整tableView的大小:
CGRect bounds = [tableView bounds];
NSLog(@"%f",tableView.contentSize.height);
[tableView setBounds:CGRectMake(bounds.origin.x,
bounds.origin.y,
bounds.size.width,
20 * [self.suggestionData count])];
/*
CGRect frame = self.searchTableView.frame;;
frame.size.height = 20 * [self.suggestionData count];
self.searchTableView.frame = frame;
*/
(20是1行的高度。)我也尝试了tableView.contentSize.height,但它没有用。也许当我试图找到解决方案时,我需要在Storyboard或I中更改某些内容。我只是得到了我在故事板中设置的tableview的高度。感谢
答案 0 :(得分:0)
由于UITableView
扩展了UIScrollView
,我建议您使用以下方法来获取其边界适合其内容大小的表视图。
在您的特殊TableView的-init
或-awakeFromNib
(您可以扩展UITableView或创建类别)注册观察者
[self addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
然后添加
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (object == self && [keyPath isEqualToString:@"contentSize"]) {
CGRect frame = self.frame;
CGFloat currentHeight = self.contentSize.height;
if (fabs(currentHeight - frame.size.height) > FLT_EPSILON) {
frame.size.height = self.contentSize.height;
self.frame = frame;
}
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:nil];
}
}
请记得在-dealloc
- (void)dealloc {
[self removeObserver:self forKeyPath:@"contentSize"];
}