【问题标题】:setContentOffset only works if animated is set to YESsetContentOffset 仅在动画设置为 YES 时才有效
【发布时间】:2010-05-26 23:01:23
【问题描述】:

我有一个 UITableView,我希望它向下显示 100 像素。出于某种原因,这仅在动画设置为 YES 时有效。这是为什么呢?

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    /*[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] 
                          atScrollPosition:UITableViewScrollPositionNone 
                                  animated:NO];*/

    /*[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathWithIndex:1] 
                                        atScrollPosition:UITableViewScrollPositionNone 
                                        animated:NO];*/

    [self.tableView setContentOffset:CGPointMake(0,100) animated:YES];
}

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview


    【解决方案1】:

    如果您尝试使用 setFrame 而不是 setContentOffset 会怎样?

    您应该在 viewDidAppear 方法中添加此代码:

    
    [self.tableView setFrame:CGRectMake(0, 100, 320, 380)];
    

    根据视图中的其他元素(例如导航控制器、工具栏等),您必须将 380 调整为其他元素。

    【讨论】:

    • 有没有办法让高度动态化?
    【解决方案2】:

    使用 XCode 提供的基于导航的基本应用程序并为其提供一些表格单元格,它可以很好地与您提供的内容配合使用。您是否尝试过在 viewDidAppear 而不是 viewWillAppear 中设置内容偏移量?

    【讨论】:

    • 这个视图是如何呈现的?这个视图是在加载时直接显示的吗?是动画化的吗?另外,这是另一个视图中的视图吗?等等。
    • 正在动画中。这不是另一个视图中的视图。
    【解决方案3】:

    将“setContentOffset”移动到“viewDidLoad”并在其前添加“reloadData”:

    在斯威夫特中:

    func viewDidLoad() {
        super.viewDidLoad()
        tableView.reloadData() // important for scrolling to be possible
        tableView.setContentOffset(newContentOffset), animated: false)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      相关资源
      最近更新 更多