如何在主详细信息应用程序中使详细信息视图可滚动

Posted

技术标签:

【中文标题】如何在主详细信息应用程序中使详细信息视图可滚动【英文标题】:How to make detail view scrollable in master detail app 【发布时间】:2012-02-29 03:52:45 【问题描述】:

我只在 ios 中工作了几个月,但我一直在为一些看起来应该很简单的事情苦苦思索好几个小时。我将 Xcode 中的主详细信息模板用于 iPad 应用程序。我希望细节部分可以滚动,以在任一方向显示框架中可见内容下方的内容。我已经尝试了在 viewWillAppear、viewDidLoad、loadView 的 DetailViewController 中添加滚动视图的多种组合......我能想到的最好的方法是在顶层看起来像一个可滚动视图,因为它确实显示了滚动条并向我展示了我scrollView.contentSize 是否正确,因为我可以平移,但是带有字段和内容的实际视图没有移动,并且无法编辑字段。这是我目前的 viewDidAppear 。正如您在 NSLogs 中看到的那样,我试图了解视图堆栈。如果我取消注释日志前的行,我将完全失去滚动条。

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
    scrollView.contentSize = CGSizeMake(2048, 2048);

    UIView *parentView = [[UIView alloc] init];

    parentView = [[self view] superview];

    [[parentView superview] addSubview:scrollView];

    //[scrollView addSubview:[self view]];

    NSLog(@"%@", [parentView superview]);
    NSLog(@"%@", parentView);
    NSLog(@"%@", [super view]);
    NSLog(@"%@", [self view]);

    [scrollView setDelegate:self];


我真诚地感谢任何有关如何正确实现此场景的 UIScrollView 的指导或提示。

【问题讨论】:

【参考方案1】:

您应该在 IB 中添加UIScrollView。确保将所有现有视图和控件移动为滚动视图的子视图。您必须将滚动视图链接到 IBOutlet,以便您可以在视图控制器中设置内容大小。

【讨论】:

很简单。我想我通过尝试编程而不是使用 IB 让它变得太难了。我现在的一个“副作用”是我的视图实际上是一个 UIControl,因此当我触摸任何 UITextField 之外时,它会关闭键盘。似乎我不能同时拥有它和 UIScrollView 共存? 您可以继承 UIScrollView 并覆盖 touchesEnded 以检测视图中的触摸。【参考方案2】:

与其尝试将 uiscrollview 包裹在您的主视图的超级视图(您错误地尝试获取其所有权(它应该为 NULL)),不如将您的 UI 元素集中到一个全尺寸的子视图中并包裹滚动视图周围?这会容易得多。

您的层次结构如下所示:

Self.view -> ScrollView(设置了 contentSize) -> UIView 包含需要滚动的元素 -> 各种 UI 元素

【讨论】:

以上是关于如何在主详细信息应用程序中使详细信息视图可滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何使用滚动视图单击列表部分内的项目以导航到详细信息页面 SwiftUI

在 viewCell,UIViewCollection 中使按钮可点击

标题未显示在主详细信息页面菜单中

iCarousel 项目索引更改与 UITextView 中显示的随机详细信息不同步

iOS 始终提供“详细信息”栏

标题未显示在主详细信息页面菜单中