奇怪的UITableView tableviewheader滚动后更改标题高度

时间:2015-03-18 12:27:33

标签: ios uitableview

这是我遇到的奇怪行为,因为我的生活无法看到它发生的地方。

上下文,新的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

0 个答案:

没有答案