-[UIScrollView ZoomToRect:animated:] 当 contentSize
2024-06-28


谁能准确描述-[UIScrollView zoomToRect:animated:]?这个方法看起来确实做了一些复杂的事情,但苹果的文档非常稀疏。

当内容大小小于滚动视图的宽度和/或高度大小时,我会遇到此方法的不可预测的行为。在某些情况下,此方法会导致滚动视图在本应为 0 的情况下出现负内容偏移。传递略有不同的矩形,它会将内容偏移保留为 0,就像我所期望的那样。

为了演示这种奇怪的行为,我设置了一个示例项目大小为 (200, 200) 的滚动视图含有一个内容视图大小 (100, 100)。我希望缩放至矩形 ((0, 0), (200, 200))内容视图的内容应将内容保留在左上角(即什么都不应该发生)。然而,它实际上导致内容滚动到滚动视图边界的右下角(内容偏移量(-100,-100))。为什么会出现这种情况?

这是我的示例项目中的代码:

@implementation RootViewController

- (void)loadView {
    self.view = [[UIView alloc] init];

    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    self.scrollView.delegate = self;
    self.scrollView.backgroundColor = [UIColor whiteColor];
    self.scrollView.minimumZoomScale = .5;
    self.scrollView.maximumZoomScale = 4;

    self.contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    self.contentView.backgroundColor = [UIColor redColor];
    [self.contentView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap)]];

    [self.scrollView addSubview:self.contentView];
    self.scrollView.contentSize = self.contentView.frame.size;
    [self.view addSubview:self.scrollView];
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return self.contentView;
}

- (void)handleTap {
    [self.scrollView zoomToRect:CGRectMake(0, 0, 200, 200) animated:YES]; // Try changing to 199, 199 to get completely different behavior
}

@end

感谢您的任何见解!现在我猜测UIScrollView只是不是为了显示小于其自身尺寸的内容而设计的。我的用例是,我可能有一个比滚动视图更宽但高度更短的内容视图,并且我需要能够以编程方式滚动到该内容视图的右端或左端。


除非有人有更好的答案,否则我会得出这样的结论:-zoomToRect:animated:当生成的结果有未定义的结果contentSize小于bounds任一维度的大小。换句话说,如果你想安全的话,内容应该大于滚动视图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

-[UIScrollView ZoomToRect:animated:] 当 contentSize

  • itunesconnect 在防火墙后面使用应用程序加载器

    我试图将我的应用程序的应用程序商店构建 zip 文件上传到应用程序商店 当在我的办公室防火墙后面使用时 TCP IP 连接失败 我需要知道应该打开哪个端口来使用应用程序加载器上传 iPhone 应用程序 这样端口就可以打开了 或者任何其他配
  • iPhone 中 didReceiveMemoryWarning 方法中发生 level=2 警告时如何获取警报[重复]

    这个问题在这里已经有答案了 可能的重复 调用 didReceiveMemoryWarning 时向用户生成警报 https stackoverflow com questions 1992784 generating alert to us
  • CAShapeLayer 具有边框、填充颜色和舍入

    如何使用 CAShapeLayer 绘制一条同时具有边框颜色 边框宽度和填充颜色的线条 这是我尝试过的 但它只是蓝色的 self lineShape strokeColor UIColor blueColor CGColor self li
  • 在pushViewController之前设置视图控制器属性

    在我的应用程序中 我向视图添加了标签 将其连接到插座 但当我第一次从另一个视图控制器分配此插座然后调用时 什么也没有显示pushViewController来显示它 这是推送下一个显示标签的视图之前的代码 CustomViewControl
  • 将故事板转换为 XIB

    我使用 iOS 5 Storyboard 功能创建了一个应用程序 并决定希望它也能在 iOS 4 上运行 如何将我的 Storyboard 仅包含一个 ViewController 转换为 XIB 另外 ARC 可以为 iOS 4 编译吗
  • 在启用垂直分页的 UIScrollView 中垂直滚动

    希望你能给我一些指导 我有一个带有垂直分页的滚动视图设置 我的问题是视图大于屏幕 垂直 我想要的效果是让视图滚动到底部 然后翻到下一页 就像我下面的图片试图描绘的那样 我尝试将滚动视图的大小和内容大小设置为视图的大小 这确实正确地偏移了视图
  • 这可以强制iOS键盘弹出英文键盘吗?

    如果用户的 iOS 设备上有多个键盘 这可以强制弹出英文键盘吗 谢谢 From iOS 文本编程指南 https developer apple com library ios documentation StringsTextFonts
  • 如何让appium测试在iOS上运行得更快?

    目前 我正在使用 appium 进行 iOS 应用程序测试 并且我已经在 mac mini 机器上用 Java 编写了测试 我正在使用 Jenkins CI 来运行我的测试 我想更快地运行我的测试 因为目前它在 iOS 模拟器上相当慢 例如
  • Xcode 7.3.1 UITests 代码覆盖率始终为 0%

    除了主应用程序之外 我的项目中还有两个单独的单元测试和 UI 测试目标 这两个目标有不同的方案 以便我可以分别在我的 CI 服务器上运行它们 我在这两个方案中都检查了 收集代码覆盖率 最初 我通过使用 Cmd U 分别构建和运行这两个方案来
  • 是否可以更改 UISearchBar 占位符的对齐方式?

    由于输入语言不同 我需要以不同的对齐方式显示 UISearchBar I saw 这个答案 https stackoverflow com questions 9251592 how to change the alignment of a
  • iOS-Charts 如何将 UIImage 放在点旁边

    我想使用 iOS Charts 和 Swift 来绘制一些折线图来显示数据 现在 我有一个要求 在每个点旁边放置一个小图标 现在我可以在图表上添加 UIImage 但问题是如何正确获取每个点的 CGPoint 坐标 如果我改变设备或设备类型
  • Xcode 4:如何更改 ${EXECUTABLE_NAME} 变量的值?

    我想找到 xcode 4 2 中定义的 EXECUTABLE NAME 全局变量在哪里 您的目标 gt 构建设置 gt 产品名称
  • 文件从 iOS 应用程序传输到 Mac 应用程序?

    是否可以在 Mac 应用程序和 iOS 应用程序之间传输文件 我想通过 Wifi 将 iOS 应用程序中的文档目录中的文件传输到 Mac 应用程序 我该怎么做 嗯 从 iOS 5 开始 就有了 iCloud 由于这仍处于保密协议之下 我只需
  • 在`../node_modules/react-native/React`中没有找到`React-Core`的podspec

    我正在使用 React Native 当我尝试上传 Pod 时遇到此问题 我已经成功安装了node modules 但遇到了这个问题 问题是什么 如果我们删除 package lock json 和 node modules 文件夹 我会重
  • 使用 NSPredicate 进行反向字符串比较

    我一直在互联网上寻找这个答案 但到目前为止还没有运气 所以我需要咨询这里聪明又友善的人 这是我第一次在这里提问 所以我希望我做得正确 不要重复这个问题 对于我看到的所有示例 搜索字符串是核心数据中存储的内容的子字符串 另一方面 我想实现以下
  • 自定义 iOS 推送通知声音

    我一直面临一个问题 我在 iOS 中使用自定义声音实现了推送通知 它是一个 MP3 文件 当我在 iOS 5 中收到推送通知时它播放得很好 但在 iOS4 中 它不播放任何声音 你能帮我解决这个问题吗 代码是这样的 aps badge 10
  • 为什么 HTML5 Media Source 视频无法在 IOS 上运行?

    看来两者 HLS and MPEG DASH 使用相同的Media Source ExtensionAPI 那么为什么HLSvideo仅适用于 IOS 为什么不MPEG DASH在 IOS 上工作吗 造成这个 的核心区别是什么 http n
  • 应用程序大小限制和查找应用程序的大小

    好吧 我读过无数地方说应用程序大小限制是 20 MB 有些说是 50 MB 是哪一个 更重要的是 我当前的应用程序在管理器的存档部分中的 估计应用程序商店大小 为 106 1mb 然而 当我将它分发到一个临时文件时 它会以 ipa 的形式出
  • DispatchQueue.main.sync 返回 exc_bad_instruction Swift 3

    我想在我的应用程序中显示 UIActivityIndi catorView 但是当我调用sync方法从主线程 应用程序崩溃并出现错误 exc bad instruction code exc i386 invop subcode 0x0 我
  • 快速判断文件是否为有效视频

    确定文件是否是可播放视频的最快方法是什么 我不关心它是否腐败 只关心它是否是哑剧类型should可以在 iPad 上播放 我玩过将文件推送到NSURL正如另一个问题所建议的 但每个文件可能需要 gt 1 秒 这太慢了 我目前正在查看文件扩展

随机推荐