草庐IT

ios - iPhone 6 和 iPhone 6 Plus 上页面 View Controller 的奇怪行为

coder 2024-01-16 原文

我试图用三个页面实现页面 View Controller 。我已经做到了,它在配备 3.5 英寸和 4 英寸显示屏的 iPhone 上运行良好,但在 4.7 英寸和 5.5 英寸显示屏上会出现问题。

我发现隐藏 UIPageViewController 的标准页面控件是导致此错误的原因:当页面控件被隐藏时,UIPageVC 的 View 会更改其高度(+ 页面控件 View 的高度)。

我的页面内容 View Controller 对背景 ImageView 有限制以适应所有尺寸。

这是第一页:

这是第二页:

这是第三页,好的,我们已经到了最后一页:

但看看当我们返回到第二页时会发生什么(页面内容 Controller 的 View 完全向左移动了几个像素):

滑动到第一页 - 同样的结果:

但是! 看看我们在第一页之后转到第二页时看到了什么!现在通过 x 在正确的位置查看页面内容 Controller :

转到最后一页:

让我们回到第二页!神圣的****! View 再次被某些东西移动:

转到第一页,全部在“正确”(错误)位置:

从第一页返回第二页。一切都在正确的位置:

所以,我的问题是这个 UIPageViewController 是怎么回事?我以为我的约束被打破了,但我的日志中没有任何关于它的信息,在 Storyboard 中没有与约束相关的错误。

当我使用两种方法“presentationCountForPageViewController:, presentationIndexForPageViewController:”时一切正常,但按钮上方出现一条白线,其高度等于页面控件 View 的高度(因此,我需要通过删除上面列出的两种方法来隐藏它)。

提前感谢您 future 的建议!

最佳答案

我修好了!但不是以正确的方式,因为它是 iOS 端的错误。

因此,当您尝试隐藏 UIPageViewController 的页面控制 View 时,私有(private)“pageSpacing”属性在 iPhone 6 和 iPhone 6 Plus 上由于意外原因被破坏。很难从 View 中看到和理解它。在我的例子中,对于 iPhone 6 InterPageSpacing 属性已经减少了 4,对于 iPhone 6 Plus - 减少了 6 个值。因此,如果您尝试为 iPhone 4 或 5 设置 pageSpacing 属性,您会在页面之间看到一条白线,但在 6 和 6 Plus 上,这条线消失并且第二个 Controller 的 View 向左移动几个像素。

现在我只是在初始化我的 UIPageViewController 时为 UIPageViewControllerOptionInterPageSpacingKey 设置了不同的值:

- (id)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(NSDictionary *)options
{
    NSMutableDictionary *dictionary = [NSMutableDictionary new];
    NSNumber *pageSpacing =
    IS_IPHONE_4_OR_LESS
    ? @(0)
    : IS_IPHONE_5
    ? @(0)
    : IS_IPHONE_6
    ? @(4)
    : @(6);

    [dictionary setValue:pageSpacing forKey:UIPageViewControllerOptionInterPageSpacingKey];

    self = [super initWithTransitionStyle:style navigationOrientation:navigationOrientation options:dictionary];
    return self;
}

是的,修复是脏的,但我没有找到其他方法来修复它,尤其是因为它是 Apple 的错误。

关于ios - iPhone 6 和 iPhone 6 Plus 上页面 View Controller 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28739582/

有关ios - iPhone 6 和 iPhone 6 Plus 上页面 View Controller 的奇怪行为的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  3. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  4. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  5. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

  6. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  7. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  8. ruby-on-rails - RoR && "coming soon"页面 - 2

    我正在寻找一种简单的方法来为我在RubyonRails上的项目实现简单的“即将推出”(预启动)页面。用户应该能够留下电子邮件以便在项目启动时收到通知。有没有这样的插件\gem?或者我应该自己做... 最佳答案 LaunchingSoon是一个Rails插件。它还集成了MailChimp或Campaignmonitor. 关于ruby-on-rails-RoR&&"comingsoon"页面,我们在StackOverflow上找到一个类似的问题: https:/

  9. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

  10. ruby - 如何设置 Mechanize 页面编码? - 2

    我试图通过点击一个链接获得一个带有ISO-8859-1编码的页面,所以代码类似于这样:page_result=page.link_with(:text=>'link_text').click到目前为止,我得到的结果编码错误,所以我看到的字符如下:'T�tulo:'insteadof'Título:'我尝试了几种方法,包括:使用代理在第一个请求中声明编码:@page_search=@agent.get(:url=>'http://www.server.com',:headers=>{'Accept-Charset'=>'ISO-8859-1'})说明页面本身的编码page_result.

随机推荐