让 UIScrollView 在 iPad 上正常工作

Posted

技术标签:

【中文标题】让 UIScrollView 在 iPad 上正常工作【英文标题】:Getting UIScrollView to work correctly on iPad 【发布时间】:2013-05-09 19:05:50 【问题描述】:

第二次更新

感谢本帖In ios6, XCode 4.5, UIScrollView is not Scrolling, despite contentSize being set

答案已经给出!关闭 Storyboard 上的 Auto Layout(整个事情)将修复 ScrollView 并允许事情正确滚动。向人们传播这个词!

更新 添加了代码。真的无法弄清楚为什么这在 iPad 上不起作用。

.h 文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@end

.m 文件

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad

    [super viewDidLoad];
self.scrollView.contentSize = CGSize(768, 1600);


- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


@end

再次澄清我正在使用 Storyboards,我首先拖入一个 ScrollView,将大小设置为标准 iPad 屏幕(768x1004,因为我在顶部有一个导航栏),然后在上面添加我的图像,然后设置它的大小(768x1600)。然后我将这两个都连接到头文件(如上所示),但我仍然无法滚动图像。我的视图模式设置为“Aspect Fit”,这可能是问题吗?我尝试了其他设置,但没有运气,但不是全部。

任何具体的建议将不胜感激!

原帖

我知道有很多关于这个的主题,但我有一段时间试图让 ScrollView 工作。我正在尝试加载 768x1600 的图像(仅在 iPad 屏幕上),因此您必须垂直滚动才能查看更多图像内容。为了创建 ScrollView,我使用 Storyboard 并将 ScrollView 拖到 ViewController 框架中,对齐它并确保启用交互。然后,在 ScrollView 之上(也在 Storyboard 中)我添加了我希望使用的 UIImage(确保它是一个子视图)并相应地调整它的大小,然后也设置启用交互。

无论我多么努力,我都无法让它在模拟器或我的设备上运行。我已确保我的 ScrollView 在 IB 中设置为委托,即在头文件中有一个 IBOutlet,并且已合成并加载到我的实现文件中。我还确保我已将 contentSize 设置为;

self.scrollView.contentSize = CGSizeMake(768, 1600);

我还尝试通过代码将 UIImage 添加为子视图(而不是在情节提要上),当我这样做时,运行模拟器时图像不会出现。最重要的是,当我单击页面时,没有可用的滚动选项。

任何人都可以在这方面给我任何帮助,我们将不胜感激。如果需要代码,我会发布它。

【问题讨论】:

阅读教程***.com/questions/820557/… idevzilla.com/2010/09/16/uiscrollview-a-really-simple-tutorial edumobile.org/iphone/ipad-development/… 感谢 Rachel 提供这些链接。看到这些就像我发现的其他人一样,这有助于我在我的问题上更加具体。我将进行编辑,看看这是否有助于阐明我的困境。 这些以及我发现的所有教程的问题是它们太过时了。 Xcode 与编写这些教程中的大多数时有很大不同(正如仅存在 XIB 时使用的情节提要所证明的那样,并且您不再需要合成对象但所有较旧的教程都需要它)所以我发现每个当我尝试实施这些教程时,它们也无法正常工作。有谁知道针对 iPad 的当前(iOS 6 或更高版本)教程(因为几乎所有这些都是针对 iPhone 的)? 【参考方案1】:

我想我只是想通了。您说您将 UIImageView 置于滚动视图之上

UIImageView 不是用户可交互的!

尝试在 Interface Builder 中选择您的图像视图并将图像视图的“启用用户交互”设置为“是”。

如果这不起作用,我建议在代码中添加图像视图(先从 IB 中删除):

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad

    [super viewDidLoad];
    self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"someImage.png"]];
    self.imageView.frame = CGRectMake(0,0,768,1600);
    self.imageView.userInteractionEnable = YES;
    [self.scrollView addSubview:self.imageView];
    self.scrollView.contentSize = CGSizeMake(768, 1600);
    self.scrollView.frame = self.view.bounds;


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

【讨论】:

非常感谢!我确实会尝试您的解决方案。我确实确保在 UIImageView 上启用了用户交互,所以我知道不是这样。同样在 ScrollView 顶部的 ImageView 中拖动后,我将 ImageView 嵌入到 ScrollView 中(Editor > Embed In > ScrollView)。我还是会在代码中尝试一下,然后回复你。 好的,终于有机会试试代码了。可悲的是,它产生了许多错误。我需要在 self.scrollView.contentSize 中将 CGSize 更改为 CGSizeMake。我还需要将 userInteractionEnable 更改为 userInteractionEnabled。可悲的是,我不能解决最后一个问题,这与 View Did Load 下的第一个 self.imageView 部分有关。当我将图像的名称放入时,我收到警告“不兼容的指向类型将'NSString *'发送到'UIImage *'类型的参数。 当我构建和运行应用程序时,它在加载说明“2013-05-10 13:28:13.356 Scroll Test #543[7701:c07] -[__NSCFConstantString _isDecompressing]: unrecognized selector sent到实例 0x46cc 2013-05-10 13:28:13.359 滚动测试 #543[7701:c07] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFConstantString _isDecompressing]:无法识别的选择器发送到实例 0x46cc ’”。非常感谢您迄今为止的帮助撤消,我真的很感激。知道我从这里去哪里/我现在做错了什么吗? 我还应该提到,我不希望在代码中执行 imageView,因为最终我希望将一些文本字段、按钮和其他元素附加到此滚动视图。我只是想在开始放置该内容之前实际滚动一些内容。 再次感谢您的建议撤消。事实证明(我在最初的课程中一定完全错过了这一点)但是如果你为你的项目打开了自动布局,那么愚蠢的设置会完全否定 UIScrollView!苹果那里有相当糟糕的设计缺陷。谢天谢地,我重回正轨并再次工作,耶!

以上是关于让 UIScrollView 在 iPad 上正常工作的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 并不总是滚动让我发疯

UINavigationController 推送和弹出后 UIScrollView 子跳转

从 UIScrollview 向前触摸和手势到视图

UIScrollView + 改变方向 = 混乱的子视图(iPad)

将视图加载到 UIScrollView 并让里面的内容正常工作

UIScrollView 不会滚动