UITableView contentOffset行为奇怪

时间:2014-01-26 02:26:16

标签: ios iphone objective-c uiview

我有一个UIViewController,它有多个从屏幕外输入的UIViews。我没有在UIViewController中初始化和设计所有这些UIViews,而是使用相应的.h / .m文件创建了单独的nib文件,这些文件只是预先加载的。

在其中一个自定义UIViews中,我有一个带有标题UIView的UITableView。我正在尝试将此标头隐藏在原始UIViewController中的另一个组件下,此UIView将滑入其中。我最初使用[self.tableView setContentOffset:CGPointMake(0, 44) animated:NO];的示例项目来解决这个问题,但这只是在UITableViewController中。

由于某种原因,这对于子类UIView不起作用。我已尝试在- (id)initWithCoder:(NSCoder *)aDecoder- (void)layoutSubviews中设置tableView的内容偏移量,我一直在检查偏移量是否实际设置在tableView:cellForRowAtIndexPath:

NSLog(@"tableView Content Offset: %@", NSStringFromCGPoint(self.tableView.contentOffset));

但它只会返回

tableView Content Offset: {0, 0}

有趣的是,如果我在tableView:cellForRowAtIndexPath:中设置contentOffset就行了!但我知道我不应该把它放在那里。有人可以向我解释当从自定义笔尖加载UITableView时,我应该在何处以及如何实现这一点,而自定义笔尖只是一个子类UIView?如果您认为它有帮助,我可以发布所有代码。

其他信息:
问题:你是如何从笔尖加载视图的? - MAB

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"ProfileCostTableViewController" owner:self options:nil] objectAtIndex:0];

2 个答案:

答案 0 :(得分:1)

我将UITableView子类化,以查看contentOffset何时休息为{0,0}。它似乎是来自私有方法的ios7中的一个调用:_adjustContentOffsetIfNecessary。由于此方法未记录,因此我没有看到如何防止它更改偏移量,因此我认为解决方法是在延迟后或- (int) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section中更改偏移量。

答案 1 :(得分:0)

您正在使用触发方法的addSubview:添加视图:- (void)willMoveToSuperview:(UIView *)newSuperview我认为如果您将代码放在那里它应该可以正常工作。