这是我遇到的奇怪行为,因为我的生活无法看到它发生的地方。
上下文,新的UITableViewController有100行都说测试。我把另一个控制器视图作为tableHeaderView,如下所示。它正确地说高度为200.它正确显示它。到目前为止没有错。
self.tableView.tableHeaderView = _header.view;
现在当我滚动时,我想检查标题的高度以显示和隐藏标题,具体取决于视图中的数量。
- (void)showHideHeader:(UIScrollView *)scrollView {
CGPoint offset = scrollView.contentOffset;
NSLog(@"%@",@(offset.y));
if (offset.y < _header.view.bounds.size.height){
if (offset.y > _header.view.bounds.size.height * 0.75) {
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
} else {
[scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
}
}
}
在开始时和在滚动方法时记录视图会显示2个不同的高度。这个新的表控制器中没有其他代码。
(lldb) po _header.view
<UIView: 0x7fdf524b18a0; frame = (0 0; 320 200); autoresize = W+H; layer = <CALayer: 0x7fdf524b0de0>>
(lldb) po self.tableView.tableHeaderView
<UIView: 0x7fdf524b18a0; frame = (0 0; 320 200); autoresize = W+H; layer = <CALayer: 0x7fdf524b0de0>>
然后当我在滚动时记录
(lldb) po _header.view
<UIView: 0x7fdf524b18a0; frame = (0 0; 320 58); autoresize = W+H; layer = <CALayer: 0x7fdf524b0de0>>
(lldb) po self.tableView.tableHeaderView
<UIView: 0x7fdf524b18a0; frame = (0 0; 320 58); autoresize = W+H; layer = <CALayer: 0x7fdf524b0de0>>
任何想法可能导致这种奇怪的变化?
编辑:发布代码以获取更多信息,标题中没有任何内容,只需发布主页。
#import "MyCallsBaseTableViewController.h"
#import "MyCallsBaseTableHeaderViewController.h"
@interface MyCallsBaseTableViewController ()
@property (nonatomic, strong) MyCallsBaseTableHeaderViewController *header;
@end
@implementation MyCallsBaseTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
if (!_header){
_header = [[MyCallsBaseTableHeaderViewController alloc]init];
self.tableView.tableHeaderView = _header.view;
self.tableView.contentOffset = CGPointMake(0, _header.view.bounds.size.height);
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (!cell){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
cell.textLabel.text = @"TEST";
return cell;
}
#pragma mark - scrollview delegates
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self showHideHeader:scrollView];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
[self showHideHeader:scrollView];
}
- (void)showHideHeader:(UIScrollView *)scrollView {
CGPoint offset = scrollView.contentOffset;
if (offset.y < _header.view.bounds.size.height){
if (offset.y > _header.view.bounds.size.height * 0.75) {
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
} else {
[scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
}
}
}
@end