UIScrollView 不会通过自动调整大小来调整大小

2023-12-28

我读到的关于在 iOS 5+ 上支持 UIScrollView 的所有内容都表明我应该能够使用 Xcode 的 Size Inspector 中的自动调整大小功能来自动调整视图的大小。

使用故事板,我有一个 TabBarViewController,其中我的选项卡之一有一个 UIScrollView 和一个页面控件。

在幕后,我以编程方式设置了 UIView 中页面的处理(我不知道是否有必要发布代码,但为了清楚起见,我无论如何都会这样做)。

从 iPhone 3.5 英寸切换到 iPhone 4 英寸时,自动调整大小不起作用。我希望在使用 3.5 英寸屏幕时使 UIScrollView 和 Page 控件可见。

我应该注意到,iPad 版本(参见下面的代码)在我的子视图中无法正确对齐。 (这可能是一个不同的问题)。

4 Inch Screen 4 Inch Screen

3.5 Inch Screen 3.5 Inch Screen

以防万一,这是我的 .m 文件:

#import "TutorialViewController.h"

@interface TutorialViewController ()
@property (nonatomic, strong) NSArray *pageImages;
@property (nonatomic, strong) NSMutableArray *pageViews;

- (void)loadVisiblePages;
- (void)loadPage:(NSInteger)page;
- (void)purgePage:(NSInteger)page;

#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif


@end

@implementation TutorialViewController

@synthesize scrollView = _scrollView;
@synthesize pageControl = _pageControl;

@synthesize pageImages = _pageImages;
@synthesize pageViews = _pageViews;



- (void)loadPage:(NSInteger)page {
    if (page < 0 || page >= self.pageImages.count) {
        // If it's outside the range of what you have to display, then do nothing
        return;
    }

    // 1
    UIView *pageView = [self.pageViews objectAtIndex:page];
    if ((NSNull*)pageView == [NSNull null]) {
        // 2
        CGRect frame = self.scrollView.bounds;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0.0f;

        // 3
        UIImageView *newPageView = [[UIImageView alloc] initWithImage:[self.pageImages objectAtIndex:page]];
        newPageView.contentMode = UIViewContentModeScaleAspectFill;
        newPageView.frame = frame;
        [self.scrollView addSubview:newPageView];
        // 4
        [self.pageViews replaceObjectAtIndex:page withObject:newPageView];
    }
}

- (void)purgePage:(NSInteger)page {
    if (page < 0 || page >= self.pageImages.count) {
        // If it's outside the range of what you have to display, then do nothing
        return;
    }

    // Remove a page from the scroll view and reset the container array
    UIView *pageView = [self.pageViews objectAtIndex:page];
    if ((NSNull*)pageView != [NSNull null]) {
        [pageView removeFromSuperview];
        [self.pageViews replaceObjectAtIndex:page withObject:[NSNull null]];
    }
}

- (void)loadVisiblePages {
    // First, determine which page is currently visible
    CGFloat pageWidth = self.scrollView.frame.size.width;
    NSInteger page = (NSInteger)floor((self.scrollView.contentOffset.x * 2.0f + pageWidth) / (pageWidth * 2.0f));

    // Update the page control
    self.pageControl.currentPage = page;

    // Work out which pages you want to load
    NSInteger firstPage = page - 1;
    NSInteger lastPage = page + 1;


    // Purge anything before the first page
    for (NSInteger i=0; i<firstPage; i++) {
        [self purgePage:i];
    }

    // Load pages in our range
    for (NSInteger i=firstPage; i<=lastPage; i++) {
        [self loadPage:i];
    }

    // Purge anything after the last page
    for (NSInteger i=lastPage+1; i<self.pageImages.count; i++) {
        [self purgePage:i];
    }

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // Load the pages that are now on screen
    [self loadVisiblePages];
    // NSLog(@"Scroll View Did Scroll");
}


- (void)viewDidLoad {
    [super viewDidLoad];

    // Step 1
    if (IS_IPAD())
    {
        self.pageImages = [NSArray arrayWithObjects:
                           [UIImage imageNamed:@"1536x2048 tutorial_1.png"],
                           [UIImage imageNamed:@"1536x2048 tutorial_2.png"],
                           [UIImage imageNamed:@"1536x2048 tutorial_3.png"],
                           [UIImage imageNamed:@"1536x2048 tutorial_4.png"],
                           nil];
    }
    else
    {
        self.pageImages = [NSArray arrayWithObjects:
                           [UIImage imageNamed:@"640x960 tutorial_1.png"],
                           [UIImage imageNamed:@"640x960 tutorial_2.png"],
                           [UIImage imageNamed:@"640x960 tutorial_3.png"],
                           [UIImage imageNamed:@"640x960 tutorial_4.png"],
                           nil];
    }


    NSInteger pageCount = self.pageImages.count;

    // Step 2
    self.pageControl.currentPage = 0;
    self.pageControl.numberOfPages = pageCount;

    // Step 3
    self.pageViews = [[NSMutableArray alloc] init];
    for (NSInteger i = 0; i < pageCount; ++i) {
        [self.pageViews addObject:[NSNull null]];
    }
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Step 4
    // 3.5in height = 388
    // 4in height = 476
    CGSize pagesScrollViewSize = self.scrollView.frame.size;
    self.scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * self.pageImages.count, pagesScrollViewSize.height);

    // Step 5
    [self loadVisiblePages];
}

@end

像这样使用

or

这样你的问题就会解决

或者在 .m 文件中编写单行代码

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

UIScrollView 不会通过自动调整大小来调整大小 的相关文章

  • .net MVC 将 MP4 流式传输到 iDevice 问题

    我一直在编写用于提供视频服务的一段代码 但遇到了一些问题 代码如下 public ResumingFileStreamResult GetMP4Video string videoID if User Identity IsAuthenti
  • Xcode 中定义的宏 CURRENT_PROJECT_VERSION 在哪里?

    这个帖子如何在 xcode 8 中设置 CURRENT PROJECT VERSION https stackoverflow com questions 39673280 how to set current project versio
  • 如何防止 iPhone 4 在添加到主屏幕时截断我的标题?

    我的网页标题很长 当添加到 iPhone 旧版本的主屏幕时 整个标题在确认对话框中可见 当我添加到 iPhone 4 的主屏幕时 标题在第 12 个符号之后被切断 有没有办法阻止这种剪切 让 iPhone 默认显示完整标题 显然会有一个无证
  • ios7 绘图时出现延迟

    我有一个应用程序 在其中我正在视图上绘制一些草图 到目前为止 在我安装之前它运行良好ios7 我的应用程序使用触摸移动方法来识别运动的变化 但是当我画一条线时 触摸方法被调用 但线不会更新 直到我触摸结束ios7 所以画起来有一点点滞后 它
  • Xcode 6 代码编辑器异常行为

    截至最近 我在使用 Xcode 6 代码编辑器时遇到了一些麻烦 最终导致编辑窗口中的焦点快速变化 在编辑文本时跳转到同一文件中完全不同的位置 一切就是这样开始的 最近 编辑器拒绝上下滚动 挂起 停止显示行号或任何其他文本 我该怎么做才能让它
  • 如何让 xcodebuild 将编译错误和警告打印到 stderr?

    似乎 xcodebuild 将所有内容打印到标准输出 Applications Xcode app Contents Developer usr bin xcodebuild project test xcodeproj build tar
  • Swift:转义闭包捕获非转义参数“onCompletion”

    我的 swift 有问题 我正在尝试发送 API 请求 然后检索数据 但收到以下错误消息 Swift 转义闭包捕获非转义参数 onCompletion 有谁知道我该如何解决这个问题 提前致谢 Code class RestApiManage
  • 如何在运行时更改 UIMenu 内 UIAction 的状态?

    如何更改 UIAction 的状态 目标是切换 UIMenu 内 UIAction 旁边的状态复选标记 更改 UIAction 的state通过存储在视图控制器中的引用似乎根本不会改变状态 我错过了什么吗 View Controller i
  • CBPeripheralManager 连接回调

    我正在尝试在两个 iOS 设备之间建立蓝牙连接 这个想法是 一个设备提供一项服务 多个设备连接到该服务 设备 A 服务 用户滑动浏览演示文稿 设备 B 多个客户端 用户观看演示 无交互 根据我的理解 提供服务的人应该通过创建 CBPerip
  • 该捆绑包无效。 Apple 目前不接受使用此版本操作系统构建的应用程序。 (小牛队)

    我首先说我已经安装了 Mavericks 我很好奇看到新功能 最好还是等待 因为 显然 没有什么耸人听闻的变化 无论如何 我正在尝试将我的应用程序提交到应用程序商店 但经过与代码签名的真正艰苦斗争后 我最终得到了以下消息 此捆绑包无效 Ap
  • MKPolylineView initWithPolyLine:在 iOS 7 中已弃用

    我收到以下错误 initWithPolyline 已弃用 首先在 iOS 7 0 中弃用 MKPolylineView lineView MKPolylineView alloc initWithPolyline overlay 代替这个的
  • UI键盘回避和自动布局

    鉴于 iOS 6 中对自动布局的关注以及 Apple 工程师的推荐 查看 WWDC 2012 视频 我们不再直接操作视图的框架 那么如何仅使用自动布局和 NSLayoutConstraint 来避免键盘呢 Update 这看起来是一个合理的
  • 移动文件并覆盖[重复]

    这个问题在这里已经有答案了 即使同名文件已存在 我也尝试移动文件 NSFileManager moveItemAtURL location1 toURL location2 Does NSFileManager的方法moveItemAtUR
  • 如何在 iOS 中通过 3G 连接创建无线热点

    如果我愿意 我将如何创建一个像这样的应用程序MyWi http intelliborn com mywi html 即 WiFi 网络共享应用程序 实现该功能需要哪些步骤 我需要使用哪些框架 库 我们的目标不是尝试将此应用程序放入应用程序商
  • UINavigationBar setBackgroundImage 在 AppDelegate 中使用 Swift

    我正在尝试在 Swift 的 App Delegate 中全局设置导航栏的背景图像 我可以让它在单独的视图控制器上工作 如下所示 var topBar UINavigationBar topBar setBackgroundImage UI
  • AVPlayer 失败并显示 AVPlayerItemStatusFailed(OSStatus 错误 -12983)

    有时 AVPlayer 会失败AVPlayerItemStatusFailed发生故障后 AVPlayer 继续失败AVPlayerItemStatusFailed 我尝试清除 AVPlayer 实例并创建新实例 但无法实现AVPlayer
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • 如何使用 Javascript 从 Chrome iOS 下载 blob 文件?

    如何使用 Javascript 从 Chrome iOS 下载 blob 文件 我正在从 iOS 下载文件 pdf excel txt png iOS 没有文件系统 这对下载来说是一个问题 我创建了一个代码 根据操作系统和导航器 如果需要
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积
  • 如何声明仅调试语句

    在 C 中 我可以使用以下代码来获得仅在调试构建期间执行的代码 我如何在 Xcode 中执行相同的操作 if DEBUG etc etc endif 您可以使用 ifdef DEBUG endif 你需要添加DEBUG 1到调试配置设置中项

随机推荐

  • 在 C++ 中通过 OpenCV 以非常小的步长平移图像

    我正在以非常小的步长进行图像翻译 例如按 1 1024 在列中翻译 考虑我有以下图像 我在 opencv 中使用 Mat 创建图像 类型为 CV 64F 255 0 0 0 现在 通过在 1 1024 列中进行翻译 我期望得到以下结果 25
  • Eclipse 不使用添加类路径变量中的 jar

    我添加了一个指向 jar 缓存的类路径变量 通过 eclipse 的构建路径 虽然此文件夹显示在 Eclipse 的文件夹视图中 但由于某种原因无法识别其中包含的 jar 例如 当我导入缓存中的 jar 中存在的类 以及添加的类路径变量 时
  • div 内文本中的新行

    当我放置通过 ajax 调用加载的文本时 我遇到了一个小问题 我从文本区域获取内容并将其存储在数据库中 当我想在 div 中显示文本时 它不尊重新行 因此所有文本都是连续的 下面的代码展示了一个小例子 function buttonA cl
  • Eclipse 中“现有连接被远程主机强制关闭”

    我一直在使用 Eclipse 构建 Android 应用程序 并在我的 HTC One X 上测试它们 我从 HTC Sync 安装了驱动程序 并且 Eclipse 是最新的 最近 此连接完全停止工作 计算机 运行 Windows 8 Pr
  • 禁用和启用后退按钮

    在应用程序中 我正在使用 GPS 查找用户位置 在异步预执行方法中 我正在显示一个吐司 我希望在显示吐司时应禁用后退按钮 找到位置后 我想在执行后启用后退按钮 禁用我使用过的后退按钮 但这不起作用 OnKeyListener mainScr
  • 使用 JWT 保护 WebAPI

    我正在尝试编写一个移动应用程序 该应用程序将从基于 webapi 的站点获取数据 该站点应通过 ACS 进行保护 因为可能有多个身份提供商 我的移动应用程序当前正在查询以下网址获取 IP 列表 然后 我允许用户选择 IP 然后使用 Web
  • 错误:R 无法连接到 MySQL

    我昨天将MySQL更新到最新版本8 0 11 并尝试使用RMySQL连接MySQL 但它不起作用 我找不到任何解决方案 My code library RMySQL con lt dbConnect MySQL user hello pas
  • 如何替换va_list中的值?

    我想做一些关于 va list 的练习 这是我的代码 int myscanf char fmt va list ap va start ap fmt vfscanf stdin fmt ap va end ap int main int a
  • 通过 iPhone 应用程序在 Facebook“提要”上发布图片

    我正在使用 ASIHTTPRequest 来处理 Facebook 图形 API 这是我最近在动态上发布图片的一次 所以如果我有一个 ASIFormDataRequest request ASIFormDataRequest request
  • 函数式语言中折叠/归约的实际使用

    Fold aka reduce 被认为是一个非常重要的高阶函数 Map可以表示为fold see here http en wikipedia org wiki Fold 28higher order function 29 List fo
  • 如何在调用下一个回调函数之前添加延迟?

    我正在尝试制作一个 javascript 横幅 我在一个 div 中有 3 个图像 id 为 img1 img2 img3
  • 模板非类型参数

    14 3 2 非类型 非模板模板参数的模板参数应为以下之一 指定具有静态存储持续时间的对象的地址的常量表达式 5 19 外部或内部链接或具有外部或内部链接的功能 在下面显示的代码中 我无法理解为什么不允许 name2 和 name3 作为非
  • Node.js - 将 https.request() 与内部 CA 一起使用

    我该向谁获取 https request 来信任我的内部签名服务器证书 以下是我在 v0 10 25 中运行的代码的快速示例 var options hostname encrypted mydomain local port 443 pa
  • OpenCL 找不到平台?

    我正在尝试将 C API 用于 OpenCL 我已经安装了 NVIDIA 驱动程序 并且已经测试可以运行提供的简单向量加法程序here http www thebigblob com getting started with opencl
  • 实体框架在循环中插入存储过程

    尝试使用实体框架在循环中执行插入存储过程 如下所示 var context new Entities var items context GetAllItems ToList foreach var item in items Other
  • 标签标签中的“for”是什么?

    刚刚跑过一个forHTML 标签中的参数
  • 参数字典包含参数的空条目

    我有两个视图页面使用相同的控制器和模型作为更改页面布局的方式 但我在显示第二个页面时遇到问题 这是我的错误消息 The parameters dictionary contains a null entry for parameter id
  • C++ 从基类指针访问派生类成员

    如果我分配一个类的对象Derived 基类为Base 并将指向该对象的指针存储在指向基类的变量中 我如何访问该对象的成员Derived class 这是一个例子 class Base public int base int class De
  • 使从 boost-python 类继承的 Python 类可复制

    我有一个继承自 boost python 类的类 class Magnet CMagnet CMagnet is a C based boost python class def init self CMagnet init self de
  • UIScrollView 不会通过自动调整大小来调整大小

    我读到的关于在 iOS 5 上支持 UIScrollView 的所有内容都表明我应该能够使用 Xcode 的 Size Inspector 中的自动调整大小功能来自动调整视图的大小 使用故事板 我有一个 TabBarViewControll