我在 iPhone X、iOS 11.2(模拟器)上遇到 UIScrollView 问题
我注意到如果我不设置 scrollView.contentInsetAdjustmentBehavior = .never 就会发生这种情况。
我想实现一个简单的向上滚动元素并在其中滑动另一个元素的动画。显然,当我将 contentOffset 动画更改为值 (0, 546) 时,我得到了一点弹跳(检查图片):
日志似乎证实了这一点:
scrollToBottom: insets top: 0.00; bottom: 74.00; left: 0.00; right: 0.00;
scrollToBottom: yPos 546.0
scrollToBottom: contentSize(375.0, 1240.0) self.height 768.0
scrollViewDidScroll: contentOffset (0.0, 496.333333333333)
scrollViewDidScroll: contentOffset (0.0, 486.0)
scrollViewDidScroll: contentOffset (0.0, 487.0)
scrollViewDidScroll: contentOffset (0.0, 489.0)
scrollViewDidScroll: contentOffset (0.0, 491.333333333333)
scrollViewDidScroll: contentOffset (0.0, 494.333333333333)
scrollViewDidScroll: contentOffset (0.0, 498.0)
scrollViewDidScroll: contentOffset (0.0, 501.666666666667)
scrollViewDidScroll: contentOffset (0.0, 506.0)
scrollViewDidScroll: contentOffset (0.0, 510.333333333333)
scrollViewDidScroll: contentOffset (0.0, 514.333333333333)
如您所见,开始时有大约 10 个单位反弹 496 -> 486 -> 现在增加。
如果(使用完全相同的代码)我插入更大的元素 - 一切都很好(检查图像):
和日志:
scrollToBottom: insets top: 0.00; bottom: 214.00; left: 0.00; right: 0.00;
scrollToBottom: yPos 826.0
scrollToBottom: contentSize(375.0, 1380.0) self.height 768.0
scrollViewDidScroll: contentOffset (0.0, 498.666666666667)
scrollViewDidScroll: contentOffset (0.0, 506.0)
scrollViewDidScroll: contentOffset (0.0, 518.333333333333)
scrollViewDidScroll: contentOffset (0.0, 534.666666666667)
scrollViewDidScroll: contentOffset (0.0, 555.0)
scrollViewDidScroll: contentOffset (0.0, 578.666666666667)
scrollViewDidScroll: contentOffset (0.0, 604.666666666667)
scrollViewDidScroll: contentOffset (0.0, 632.333333333333)
scrollViewDidScroll: contentOffset (0.0, 661.0)
这方面的代码相当简单:设置初始元素、设置内容偏移量、获取完成动画的委托(delegate)调用、滑入新元素。
似乎如果我关闭内容插入调整行为,它就不会发生,但在那种情况下我必须自己处理插入。这似乎不会发生在装有 iOS 11.1 的 iPhone 6 上。
您知道为什么会发生这种情况以及如何解决它吗?
最佳答案
回答我自己的问题。
问题出在 iPhone X 上 contentSize 和 contentOffset 计算的组合上。
我正在计算偏移量,然后重新计算 contentSize。 "new"contentSize 存在差异,因此当我尝试滚动时 (setContentOffset(_:animated:)) 我同时更改了 contentSize 稍微(10 点,您可以在日志中看到)并获得反弹效果。
显然,对于较大的滚动距离,10 点并不那么重要,因此它们被“插值”掉了。
关于iOS 11,iPhone X。设置 contentOffset 时,UIScrollView 弹跳方向错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47912311/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee