【问题标题】:How can I modify an existing UIViewController to allow scrolling?如何修改现有的 UIViewController 以允许滚动?
【发布时间】:2010-07-07 04:48:37
【问题描述】:

我已经构建了一个 UIViewController 子类,其中包含一堆控件,并且刚刚意识到如果我旋转 iPhone,一半的控件将变得不可见。所以,我想以某种方式使 UIViewController's UIView 可滚动,以便当设备(或模拟器)旋转时,用户可以滚动视图以查看所有控件。

我希望在 Interface Builder 中完成这一切。我试图在 Class Identity 编辑器中将视图的类从 UIView 更改为 UIScrollView,但没有滚动。我的视图控制器的基类是一个简单的UIViewController<UIScrollViewDelegate>

有没有一种简单的方法可以让我的视图控制器中的主视图可滚动,而无需在 IB 中重新创建整个内容?

【问题讨论】:

  • 我也有同样的问题,好像没人知道

标签: iphone uiview uiviewcontroller interface-builder uiscrollview


【解决方案1】:

对于使用故事板的人来说,这很容易做到

  • 在 Document Outline 中选择 UIViewController 最顶层的View
  • 然后在 Identity Inspecter 中,在 Custom Class 下,对于 class 输入 UIScrollView

就是这样。

【讨论】:

  • 这只是破坏了我的布局。
【解决方案2】:

添加一个UIScrollView 并通过将它们从滚动视图“进入”或“内部”的任何位置拖动来使所有控件、小部件和标签子视图成为滚动视图的子视图。这使它们成为滚动视图的子视图,这正是您想要的。

【讨论】:

  • 也试过了。添加了 UIScrollView,将控件移入其中,删除了 UIView,使我的控制器成为 UIScrollViwDelegate,并使控制器成为委托,并让滚动视图成为其视图。没有滚动。
  • 你不能把视图放在滚动视图里面吗?为什么要删除原来的 UIView?
【解决方案3】:

你可以这样做:

  1. 打开您的 nib 文件并在您的 UIView 对象下创建一个 UIScrollView 对象。
  2. 将所有控件移到 UIScrollView 上
  3. 打开您的头文件 (.h) 并为滚动视图添加一个新属性:

@property(非原子,保留)IBOutlet UIScrollView *scrollView;

  1. 打开您的实现文件 (.m) 并插入以下内容:

@synthesize scrollView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

   // Enable scrolling for portrait
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, 600);  

}
  1. 返回您的 nib 文件并将文件所有者的 scrollView 连接到您的 UIScrollView 对象。

这里真正的技巧是设置scrollView.contentSize。设置完成后,应该会发生滚动。

如果你想在设备处于纵向时启用滚动,你可以使用这个:

   // Enable scrolling for landscape orientation
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height); 

这应该给你一些参考框架。

跳蚤

【讨论】:

    【解决方案4】:

    了解您的界面显示的内容会有所帮助,但我建议您选择以下方法之一:

    1. shouldAutorotateToInterfaceOrientation 返回 NO,不允许旋转
    2. 使用 Interface Builder adjust your springs and struts 使您的所有界面元素都适合横向视图
    3. 在 Interface Builder 中添加一个新的 UIScrollView 并将您的 UIView 拖入其中,然后将 File's Owner 的视图属性重新分配给滚动视图。

    【讨论】:

    • 1.我要轮换。 2. 没有空间。相信我。 3. 试过了。没有滚动。是委托问题吗?
    • 您是否尝试过在 UIScrollView 旋转时更新它的 contentSize?
    【解决方案5】:

    我可以通过向 IB 中的视图添加滚动视图、使视图控制器成为 UIScrollViewDelegate、将滚动视图连接到 IB 中的 UIScrollView 对象、将委托连接到文件所有者并添加此行来做到这一点在 viewDidLoad 中:

        - (void) viewDidLoad {
            scrollView.contentSize = CGSizeMake(1280, 960);
        }
    

    【讨论】:

      【解决方案6】:

      仅当UIScrollViewcontentSize 大于其边界时才会调用滚动行为。

      【讨论】:

        【解决方案7】:

        将滚动条添加到 Xib 文件中,然后将控件拖放到滚动条中。在load view里面使用

        scrollView.contentSize = CGSizeMake(CONTENT_WIDTH, CONTENT_HEIGHT);
        

        【讨论】:

        • 为提高您的帖子质量,请说明此代码将如何/为何解决问题。
        猜你喜欢
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        • 1970-01-01
        • 2011-01-18
        相关资源
        最近更新 更多