【问题标题】:UIScrollView scrolls horizontally instead of vertically?UIScrollView 水平滚动而不是垂直滚动?
【发布时间】:2013-07-29 18:25:19
【问题描述】:

我有一个 UIScrollView,里面有一个文本字段和一个 UIImageView。我正在尝试让它垂直滚动(支持设备旋转到横向与纵向),但无论我做什么,它只会水平滚动而不是垂直滚动,我不知道为什么。

我已经阅读了很多关于自动布局和滚动视图的内容,所以我认为这可能是一个自动布局问题。但是,我已经配置了自动布局来处理旋转切换到横向,所以我想保持它打开。子视图通过情节提要添加到滚动视图。

我通常也对 scrollView 的 contentSize 感到困惑。这应该比文档中的屏幕尺寸大吗?我还看到了一个 stackoverflow 问题,它应该与屏幕大小相同,这让我感到困惑。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.scrollView setDelegate:self];
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height+400);
}

-(void)orientationChanged:(NSNotification *)notification{
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height+400);

}

【问题讨论】:

  • 只是为了调试原因,能不能测量一下scrollview frame?只需对 self.scrollView.frame = CGRectMake(0,0,320,480) 进行硬编码,看看你是否得到相同的行为。

标签: ios uiscrollview autolayout


【解决方案1】:

scrollView 的滚动方向将由contentSize 与scrollView 框架的关系决定。 contentSize 是包含所有 scrollView 子视图的容器的大小(scrollView 实际上是一个窗口的容器)。

首先,将scrollView.frame 设置为您想要的任何值。

其次,将您的图像(或任何其他内容)添加到滚动视图。确保图像高度 scrollView.frame.size.height 以确保仅水平滚动。 (据我所知,UIScrollView 没有方向锁定。) ContentSize 应该自动设置,但您也可以直接设置,例如:

[scrollView setContentSize:(CGSize){scrollView.size.height, someLargeWidth}];

您不需要在旋转时重新设置 contentSize。您可以在旋转时显式设置 scrollView.frame,或者使用 autoresizingMask 或使用 autoLayout。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2010-10-18
    • 1970-01-01
    • 2013-12-25
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多