gpt4 book ai didi

ios - 调用 topLayoutGuide 会完全中断滚动吗?

转载 作者:技术小花猫 更新时间:2023-10-29 10:16:41 25 4
gpt4 key购买 nike

我在使用 topLayoutGuide 方法时遇到了奇怪的问题,我必须在 setAutomaticallyAdjustsScrollViewInsets: 不起作用的情况下使用它。为了缩小问题的原因,我创建了以下最小示例,它只是设置了一个用于测试的基本 TableView :

  1. 在 Xcode 中设置一个新的 iOS 单 View 应用程序。
  2. 将以下代码粘贴到 ViewController.m 的实现中:

    @implementation ViewController

    - (void)loadView
    {
    [self setTableView:[[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]];
    }

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    [self setAutomaticallyAdjustsScrollViewInsets:NO]; // [*]
    }

    - (void)viewDidLayoutSubviews
    {
    UITableView *tableView = [self tableView];

    UIEdgeInsets insets = [tableView contentInset];
    // insets.top = [[self topLayoutGuide] length]; // [1]
    // insets.top = 100; // [2]

    [tableView setContentInset:insets];
    [tableView setScrollIndicatorInsets:insets];
    }

    #pragma mark - Table view data source

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    return 100;
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    [[cell textLabel] setText:[NSString stringWithFormat:@"%d", [indexPath row]]];

    return cell;
    }

    @end

我遇到的问题是:

  1. 如果我取消注释标记为 [1] 的行,则会应用正确的插图,但滚动表格 View 不再有效。当我尝试滚动时,松开手指后表格会弹回初始滚动位置。此行为也会由对 [self topLayoutGuide] 的简单调用触发,而无需将结果分配给任何内容。

  2. 如果我取消注释行 [2] 而不是 [1],则滚动有效。也应用了 100 pt 的插图。但现在会自动调整初始滚动位置,使内容位于状态栏下方。

([*]:这似乎真的只能与包含的导航 Controller 结合使用。我在这个例子中似乎没有什么不同,但我想禁用任何自动行为只是为了确定。)

有什么明显的我做错了吗?我真的在这里不知所措。

最佳答案

这绝对是 iOS 7 中的一个错误(在 7.1 中似乎没有修复)但似乎只影响 UITableViewControllers .我切换到使用 UIViewController带有嵌入式 UITableView因为我没有使用静态单元格并且不需要任何 UITableViewController 的“魔法”给你。

一旦我连接了 UITableViewDataSourceUITableViewDelegate手动我能够开始使用 self.topLayoutGuide不会弄乱 tableView 的 contentSize。

在 Apple 修复错误之前,这对我来说是一个可以接受的解决方法。

关于ios - 调用 topLayoutGuide 会完全中断滚动吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com