【问题标题】:Adding UIScrollView to a UIViewController将 UIScrollView 添加到 UIViewController
【发布时间】:2023-03-28 18:05:01
【问题描述】:

我有一个UIViewController,我想给它添加一个UIScrollView(启用滚动支持),可以吗?

我知道有可能,如果你有一个 UIScrollView 可以添加一个 UIViewController 到它,但如果我不能添加一个 UIScrollView 到现有的 UIViewController,我也很感兴趣,这样我就有了滚动功能。

编辑

我想我找到了答案:Adding a UIViewController to UIScrollView

【问题讨论】:

  • 您可以将 UIScrollView 添加到 UIViewController 的视图中,并且您可以将 UIViewController 的视图添加到 UIScrollView
  • 在做类似的事情之前,我会先看看什么是控制器,什么是视图。它们确实是不同的东西。
  • 您可以将滚动视图添加到视图控制器并将视图控制器添加到滚动视图,只需将滚动视图作为子视图添加到现有视图控制器
  • 我知道什么是视图和视图控制器,为什么它与我的情况相关?
  • @user1903992 您可以将视图作为子视图添加到滚动视图,反之亦然。但不是视图控制器。视图控制器是一个对象,它通常具有(至少一个)视图作为 ivar。

标签: ios uiviewcontroller uiscrollview


【解决方案1】:

UIViewController 具有 view 属性。因此,您可以将UIScrollView 添加到其view。换句话说,您可以将滚动视图添加到视图层次结构中。

这可以通过代码或通过 XIB 来实现。此外,您可以将视图控制器注册为滚动视图的委托。通过这种方式,您可以实现用于执行不同功能的方法。请参阅UIScrollViewDelegate 协议。

// create the scroll view, for example in viewDidLoad method
// and add it as a subview for the controller view

[self.view addSubview:yourScrollView];

您还可以覆盖UIViewController 类的loadView 方法,并将滚动视图设置为您正在考虑的控制器的主视图。

编辑

我为您创建了一个小样本。在这里,您有一个滚动视图作为UIViewController 视图的子视图。滚动视图有两个子视图:view1(蓝色)和view2(绿色)。

在这里,我想您只能在一个方向上滚动:水平或垂直。在下面,如果您水平滚动,您可以看到滚动视图按预期工作。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    scrollView.backgroundColor = [UIColor redColor];
    scrollView.scrollEnabled = YES;
    scrollView.pagingEnabled = YES;
    scrollView.showsVerticalScrollIndicator = YES;
    scrollView.showsHorizontalScrollIndicator = YES;
    scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height);    
    [self.view addSubview:scrollView];

    float width = 50;
    float height = 50;
    float xPos = 10;
    float yPos = 10;

    UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(xPos, yPos, width, height)];
    view1.backgroundColor = [UIColor blueColor];    
    [scrollView addSubview:view1];

    UIView* view2 = [[UIView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width + xPos, yPos, width, height)];
    view2.backgroundColor = [UIColor greenColor];    
    [scrollView addSubview:view2];
}

如果你只需要垂直滚动你可以改变如下:

scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height * 2);

显然,你需要重新排列view1view2的位置。

附:这里我使用 ARC。如果不使用 ARC,则需要显式地release alloc-init 对象。

【讨论】:

  • 嗨我想过这个,将 UIScrollView 作为子视图添加到我的 ViewController,只是我怀疑这是否会允许“滚动功能”......(你知道,因为我将它添加为一个“子视图”..)
  • @user1903992 当然,如果将滚动视图添加为子视图,它将在此之上。将视图层次结构视为堆栈。滚动视图将响应用户交互。
  • 所以,每当您添加视图时,它位于之上???嗯......有趣......不知道......看起来确实像一个堆栈。
  • @user1903992 就像已经解释过的 flexaddicted 一样,您不能将 UIScrollView 作为子视图添加到您的 ViewController。您可以将滚动视图作为子视图添加到视图控制器的视图中。
  • 我建议阅读developer.apple.com/library/ios/#documentation/windowsviews/…希望对您有所帮助。关于你的问题,是的。但您也可以更改该堆栈。
猜你喜欢
  • 1970-01-01
  • 2017-11-21
  • 2014-08-18
  • 2019-06-05
  • 2015-04-15
  • 1970-01-01
  • 2012-02-14
  • 2019-06-11
相关资源
最近更新 更多