如何防止 UIView 调整大小以适应 ScrollView 高度(自动调整大小已禁用)?

2023-12-01

我正在使用 vfr-reader 库编写 PDF 阅读器。为了横向显示两个页面,我将每个页面渲染到自己的视图中,然后将这两个视图添加到容器视图中,然后将容器视图添加到滚动视图中。每个视图的 autoresizingMask 设置为 UIViewAutoresizingNone,contentMode 为 UIViewContentModeRedraw,所有视图的 autoresizingSubviews 设置为“NO”。

但容器视图仍然以某种方式自动调整大小以适应滚动视图的高度,而且我不知道这种情况发生在哪里。我关心这一点,因为当自动调整容器视图大小时,它的宽度变得大于屏幕宽度,并且我无法通过一次滑动滚动到接下来的两页(需要两次滑动),这很糟糕。我缺少什么?

EDIT如果有帮助的话会添加一些。在 ViewController 中,我使用以下选项创建滚动视图:

theScrollView = [[ReaderScrollView alloc] initWithFrame:viewRect];
theScrollView.scrollsToTop = NO;
theScrollView.pagingEnabled = YES;
theScrollView.delaysContentTouches = NO;
theScrollView.showsVerticalScrollIndicator = NO;
theScrollView.showsHorizontalScrollIndicator = NO;
theScrollView.contentMode = UIViewContentModeRedraw;
theScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
theScrollView.backgroundColor = [UIColor clearColor];
theScrollView.userInteractionEnabled = YES;
theScrollView.autoresizesSubviews = NO;
theScrollView.delegate = self;
[self.view addSubview:theScrollView];

当我绘制页面时,我将 UIView 添加到滚动视图,这是通过以下方式启动的:

if ((self = [super initWithFrame:frame]))
{
    self.autoresizesSubviews = YES;
    self.userInteractionEnabled = YES;
    self.contentMode = UIViewContentModeRedraw;
    self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;       
    self.backgroundColor = [UIColor clearColor];

    theScrollView = [[ReaderScrollView alloc] initWithFrame:self.bounds]; // Not sure about this part - why is the 2nd scroll view added?
// this is the way its done in vfr reader

    theScrollView.scrollsToTop = NO;
    theScrollView.delaysContentTouches = NO;
    theScrollView.showsVerticalScrollIndicator = NO;
    theScrollView.showsHorizontalScrollIndicator = NO;
    theScrollView.contentMode = UIViewContentModeRedraw;
    theScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    theScrollView.backgroundColor = [UIColor clearColor];
    theScrollView.userInteractionEnabled = YES;
    theScrollView.autoresizesSubviews = NO;
    theScrollView.bouncesZoom = YES;
    theScrollView.delegate = self;

    theContentView = [[ReaderContentPage alloc] initWithURL:fileURL page:page password:phrase landscape:(BOOL)isLandscape position:FALSE];
    CGRect viewRect = CGRectZero;
    viewRect.size.width = theContentView.bounds.size.width;
    viewRect.size.height = theContentView.bounds.size.height;    


    if( isLandscape){
        NSLog(@"Landscape detected in content view");
        if (theContentView == NULL)
        {
            theContentView = [[ReaderContentPage alloc] initWithURL:fileURL page:(page+1) password:phrase landscape:(BOOL)isLandscape position:FALSE];
            theContentView2 = NULL;
            viewRect.size.width = theContentView.bounds.size.width;
            viewRect.size.height = theContentView.bounds.size.height;    
        } else {
            if (page == 1)
                theContentView2 = NULL;
            else
                theContentView2 = [[ReaderContentPage alloc] initWithURL:fileURL page:(page+1) password:phrase landscape:(BOOL)isLandscape position:TRUE];
            if (theContentView2 != NULL)
               viewRect.size.width = theContentView.bounds.size.width*2;
        }            

    }       
    if (theContentView != nil) // Must have a valid and initialized content view
    {

        theContainerView = [[UIView alloc] initWithFrame:viewRect];


        theContainerView.autoresizesSubviews = NO;
        theContainerView.userInteractionEnabled = NO;
        theContainerView.contentMode = UIViewContentModeRedraw;            
        theContainerView.autoresizingMask = UIViewAutoresizingNone;
        theContainerView.backgroundColor = [UIColor whiteColor];


        theScrollView.contentSize = theContentView.bounds.size; // Content size same as view size


        theScrollView.contentOffset = CGPointMake((0.0f - CONTENT_INSET), (0.0f - CONTENT_INSET));
        theScrollView.contentInset = UIEdgeInsetsMake(CONTENT_INSET, CONTENT_INSET, CONTENT_INSET, CONTENT_INSET);

        theThumbView = [[ReaderContentThumb alloc] initWithFrame:theContentView.bounds]; // Page thumb view           

        [theContainerView addSubview:theThumbView]; // Add the thumb view to the container view

        [theContainerView addSubview:theContentView]; // Add the content view to the container view

        if(( isLandscape) && (theContentView2 != NULL)){            
             [theContainerView addSubview:theContentView2]; // Add the content view to the container view

        }           



        [theScrollView addSubview:theContainerView]; // Add the container view to the scroll view

        [self updateMinimumMaximumZoom]; // Update the minimum and maximum zoom scales

        theScrollView.zoomScale = theScrollView.minimumZoomScale; // Zoom to fit
    }

    [self addSubview:theScrollView]; // Add the scroll view to the parent container view   

    [theScrollView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:NULL];

    self.tag = page; // Tag the view with the page number
}

return self;

ReaderContentPage 是这样创建的:

if ((self = [super initWithFrame:frame]))
    {
        self.autoresizesSubviews = NO;

        self.userInteractionEnabled = NO;
        self.clearsContextBeforeDrawing = NO;
        self.contentMode = UIViewContentModeRedraw;     
        self.autoresizingMask = UIViewAutoresizingNone;
        self.backgroundColor = [UIColor clearColor];

        view = self; // Return self
    }

在函数中updateMinimumMaximumZoom在课堂里ReaderContentView:

适合屏幕的缩放比例的计算是在单个视图中完成的,但在横向中,它应该从 ContainerView 中计算。

尝试替换此代码

CGFloat zoomScale = ZoomScaleThatFits(targetRect.size, theContentView.bounds.size);

with

CGFloat zoomScale = ZoomScaleThatFits(targetRect.size, theContainerView.bounds.size);

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

如何防止 UIView 调整大小以适应 ScrollView 高度(自动调整大小已禁用)? 的相关文章

  • 带有嵌套数组的 NSPredicate

    我有以下对象结构 类别 子类别 子类别的 nsarray 子类别 问题 问题的 nsarray 问题 问题 nsstring 答案 ns字符串 我需要的是用给定的子字符串搜索任何问题 以下谓词不起作用 NSPredicate predica
  • Google 登录服务器验证码无 iOS?

    我们让 Google 登录您的应用程序 我们在请求登录时提供服务器客户端 ID 我们得到的 user serverAuthCode 为 nil 我们的要求如下 func googleLogin var configureError NSEr
  • Objective C:在 gdb 中哪里可以找到

    我正在尝试使用 NSZombie 调试我的程序 调试器确实返回了存在问题的实例的地址 但是我不确定在哪里获取运行命令 shell malloc history 所需的 pid 谁能告诉我在这种情况下使用的正确 pid 是什么 我尝试了 32
  • MonoTouch 错误:升级到 iOS 5.1 后“未安装 Apple iPhone SDK”

    我已将 iOS 5 0 1 升级到 5 1 并且使用 MonoTouch 5 2 5 和 MonoDevelop 2 8 6 5 当我在 MonoDevelop 中创建示例应用程序时 它显示错误 Apple iphone sdk 未安装 如
  • 未调用[super方法]时发出警告

    不使用 ARC 时 如果未在 dealloc 方法中调用 super dealloc 您会收到警告 我正在尝试实现与经常被子类化的类类似的东西 以在实现子类的人不调用 super 时警告他们 有任何想法吗 llvm的最新版本添加了一个属性
  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • 致命错误:找不到“Fabric/Fabric.h”文件

    我正在使用 xcode 6 3 1 OSX 10 10 3 并且我已经在本地系统上成功配置了 crashlytics 它工作正常 并通过 Fabric 应用程序发布构建 但是当我将相同的代码库转移到 teamcity 时 它向我显示以下错误
  • 如何在可可中获取图像的作者

    我不明白为什么metaDic 总是为空 有一个代码 CFDataRef dataRef CGDataProviderCopyData CGImageGetDataProvider img CGImage UIImage img CGImag
  • 相当于 AppKit 的 NSObliquenessAttributeName 的 CoreText 是什么?

    我正在使用 CoreText 在 Mac iOS 跨平台代码中绘制一些文本 我可能使用的字体没有在操作系统中为所有用户安装真正的 斜体 版本 但他们需要知道即使这样文本也是斜体的 通过 AppKit 的 NSAttributedString
  • 快速转换:错误 - CGPathAddArc

    我正在尝试将我的 Swift 2 代码转换为最新语法 Swift 3 我收到以下错误 Nil 与预期的参数类型 UnsafePointer 不兼容 斯威夫特2代码 CGPathAddArc 路径 nil overlayView frame
  • 准备未签名的 Xcarchive

    太长了 问题 有没有办法准备一个 XArchive 然后他们可以自己分配配置文件并使用适当的分发证书进行签名 长问题 我的客户向我发送了我为他们开发的应用程序的配置文件 他们不想向我发送他们的分发证书 p12 文件 他们给我的指示如下 将配
  • 获取 iOS 5 中最后一个重定向的 url?

    有人可以发布最简单的工作代码 当我 GET 请求一个 url 时 它可以获取最后一个重定向的 url nth 吗 我知道我需要使用异步请求 但我无法制定出解决问题的完整工作代码 我正在使用 ios5 因此我可以使用 ios5 中最新添加的异
  • 在 iPad 上的弹出窗口中推送导航视图控制器时动画弹出窗口内容大小

    当包含的 UINavigationController 推送新控制器时 如何让 UIPopoverController 为其大小设置动画 我有一个UIPopover正在显示从UIBarButtonItem在我的 iPad 应用程序中 它包含
  • 如何在 Xcode 项目设置中使用相对路径?

    如何在 Xcode 项目设置中使用相对路径 假定 构建设置 中的所有路径都相对于包含 xcodeproj 文件的目录 使用标准 Unix 路径标记 project directory parent directory 因此 如果您的项目文件
  • ViewController.swift(界面)文件的用途是什么 - 在 Counterparts 中

    我刚刚注意到一个名为ViewController swift Interface 当我创建第一个 ViewController 时 Xcode 自动创建了它 Swift 中的类是否具有 需要与 Objective C 中相同的接口 并且由
  • 如何以编程方式设置 iOS 6/7 Delta

    当我离开 iOS6 时 我正在使用 Xcode 4 6 开发 UISplitView 应用程序 我有设计 现在我迁移到新的 Xcode5 现在我有这样的设计 UINavigationBar 完全重叠我的 UISearchBar Leo Na
  • GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙盒)

    我正在努力将回合制比赛集成到我的游戏中 几天前 我开始从 GameKit API 收到奇怪的错误 指出本地玩家未经过身份验证 尽管他已通过身份验证 当我启动应用程序时 authenticateHandler被调用 显示视图控制器 输入密码后
  • 解雇ViewControllerAnimated:完成:在 iOS 8 上

    在 iOS dismissViewControllerAnimated completion 会导致presentedViewController being nil 在 iOS 8 中 presentedViewController仍然指
  • SQlite 查询 - 如何检索多列数据?

    我很难在网上找到一个关于使用 xcode 和 cocos2dx 从 SQlite DB 获取多个值的工作示例 这是我的sql查询 char sql query 100 sprintf sql query SELECT FROM SQList
  • Swift 和 Objective-C 框架公开其内部结构

    我正在尝试将 Swift 添加到具有公共 私有和项目文件的现有 Objective C 框架中 为了让 Swift 能够访问项目文件 我添加了一个定义新模块的模块映射 例如MyFramework Internal 通过包含所有项目标题 如下

随机推荐

  • 当子文档或集合完成创建时,不会触发 firestore OnCreate

    因此 我正在使用 flutter 和 firebase 构建一个聊天应用程序 每当两个新用户第一次开始互相聊天时 每当其中一个用户发送第一条消息时 我需要触发一个功能 这样我就可以将该信息存储在某处以显示稍后将其作为聊天记录提供给用户 曾经
  • 我不明白Oracle文档中的这一部分?

    你好 我是 Ankur 已经用 java 编码好几年了 我之前读过 Herbert Schildt 的 Head First Java The Complete Reference 最近我在这页中遇到了一个重大谬误 甲骨文文档注意部分说 如
  • 在react-native-pager-view(或任何其他)内动态更改内容

    我正在开发一个项目 我将在寻呼机视图中逐页显示某本书的详细信息和信息作为页面组件 该书包含 500 多个页面 所以我不能只创建 500 个页面组件 例如并将它们插入到寻呼机中 我想的是我可以获得一个特定的页面 仅在上一页和下一页旁边呈现其组
  • 画布不渲染以前的图像

    我有一个 asp net 网络应用程序 我使用 Web 套接字和 HTML5 canvas 将图像渲染到我的网页 这是 JS function setUpImageProc desktopImage onload function ctxL
  • WebKit 边框半径和过渡错误

    在 Google Chrome 的最新稳定版本 版本 31 0 1650 63 m 也包括 Canary 中 当涉及边框半径和过渡时 仍然存在错误 应用了边框半径的元素内的内容在动画结束之前不会被剪切 我已经设法通过转换 顶部 和 左侧 属
  • Chrome 在哪里存储 cookie?

    假设我使用以下命令设置了 cookiesetcookie 函数于PHP setcookie name foo false false 我可以在以下位置看到它 chrome settings cookies 但是 我找不到硬盘上存储的实际文件
  • PDFMiner 无法提取字体

    我正在使用 PDFMiner 将一些 pdf 报告转换为纯文本 并且我的一堆输入 pdf 只是输出了几行可识别的行 然后是一个 cid d 列表 有点像这样 检查报告 用户ID 4 用户ID 5 用户ID 6 用户ID 7 用户ID 8 用
  • 来自本地文件系统的 jQuery Ajax 请求(Windows file:///)

    我正在尝试执行 ajax 请求来获取内容 http localhost 在 Windows Wamp 服务器上运行 该脚本是从这样的地方运行的 file C my path index html 我只是使用标准 ajax 请求来尝试获取 l
  • 无法将正则表达式与 sed 匹配

    我正在尝试匹配一个模式 d x d x d x with sed没有运气 我正在运行的文件是这样的 name something version 0 0 1 description some desc main gulpfile js di
  • 如何在单选按钮组的 *ngFor 中设置最初选定的单选按钮

    Before我使用表单验证一切正常 我的单选按钮组 html 如下所示 div class form group row div
  • Pyglet 的 FPS 是显示器刷新率的一半

    我是 Pyglet 的新手 我编写了一个小程序 可以在屏幕上移动一个球 现在我很难建立 60 fps 的稳定帧速率 虽然 Pyglet 应该与我的显示器的 60Hz 刷新率同步 但 Pyglet 将我的 fps 设置为刷新率的一半 例如 当
  • 将 SSIS 包作为 SQLAgent 作业执行

    我有一个 SQL Server 2008 SSIS 作业 它执行一些 Win 32 exe 文件 当我通过 BIDS 在 Windows 2008 机器上 执行作业时 该作业运行良好 现在我已将包部署在 MSDB 数据库中 并尝试将包作为
  • Prolog算术语法

    如何定义a作为整数 浮点数 我想找到以下结果a b c d 10 where a b c d是整数并且 gt 0 这是一个简单 现代 纯 Prolog 非 CLP 库的解决方案 range X member X 0 1 2 3 4 5 6
  • 对 有效吗?

    以下是有效的 HTML 吗 我特别想知道的是
  • 在 Ruby 中使用数组联合运算符 |= 时,为什么必须在访问器上显式调用 self?

    以这个类为例 class MyClass attr accessor values uniq values def initialize value self uniq values default value self values de
  • 编辑 mongo.conf 后 MongoDB 状态失败(代码退出,状态 = 2)

    我正在尝试使用以下命令远程连接到我的 Google Cloud 服务器Robo 3T也连接MongoDB v4 0 11这样我就可以从窗口看到数据 我运行的是 Ubuntu 18 04LTS Minimal 为了启用 MongoDB 的远程
  • Node js - 创建持久的私人聊天室

    我最近读了很多关于 Node js 的文章 聊天功能看起来非常不错 然而 我见过的唯一的聊天示例基本上都是将聊天服务器广播到固定的 URL 如会议室 是否可以部分使用node js来创建一个更像gchat的聊天客户端 在当前页面上弹出聊天窗
  • MATLAB 中有没有办法计算哪些离散图像区域包围或被另一个区域包围?

    给出下图 我想确定哪些彩色区域被哪些其他彩色区域包围或包围哪些其他彩色区域 这是如何计算的 有没有办法创建一种显示此信息的树或表 示例 所有红色像素都在黄色区域内 据我所知 没有内置函数可以执行此计算 但这里有一个关于如何获取所需信息的想法
  • 生成 2 个不同的随机数 C#

    我想生成两个彼此不同的随机数 例如 如果第一个随机数生成 5 我希望生成的下一个随机数不等于 5 到目前为止 这是我的代码 Random ran new Random int getRanNum1 ran Next 10 int getRa
  • 如何防止 UIView 调整大小以适应 ScrollView 高度(自动调整大小已禁用)?

    我正在使用 vfr reader 库编写 PDF 阅读器 为了横向显示两个页面 我将每个页面渲染到自己的视图中 然后将这两个视图添加到容器视图中 然后将容器视图添加到滚动视图中 每个视图的 autoresizingMask 设置为 UIVi