- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在为 iPhone 和 iPad 开发应用程序。它支持 iOS6 和 iOS7,并且专门使用自动布局。
上周,当 Apple 宣布 iOS8 准备好迎接黄金时段时,我将我的一部 iPhone 和一部 iPad 都升级到了 iOS8。我还将我的 XCODE 升级到版本 6。我有第二部 iPhone,我留在 iOS7。
我使用 Xcode 6 生成了新的可执行文件,当我在运行 iOS8 的设备上执行时,看到它们的屏幕布局一团糟,但在 iOS7 上仍然正常,我感到很沮丧。在我的物理设备和 Xcode 的模拟器上都是如此。
这需要大量的挖掘,但我现在很清楚发生了什么,尽管我不知道为什么。
具体来说,某些自动布局操作在 iOS8 上对我来说失败了,但在 iOS7 上却没问题。
一些涉及按钮的示例,我将其放置在大小等于屏幕大小的基础 View 上:
(1) 如果我要求自动布局将按钮的水平中心 (CX) 定位为底层 View 的水平中心,结果是按钮的水平中心位于底层 View 的左边缘。
(2) 如果我要求自动布局使按钮的宽度等于基础 View 宽度的 50%,它根本没有宽度。
我可以通过以下方式解决这些问题:
(1) 我要求自动布局将按钮的中心定位为基础 View 的左边缘加上屏幕宽度的 50%。
(2) 我要求自动布局使按钮的宽度等于屏幕宽度的 50%。
我正在慢慢摸索自己的方式,使用这些变通方法,回到适用于我的 iOS7 和 iOS8 的自动布局代码。但我真的很想知道这里发生了什么。
看起来自动布局无法确定底层 View 的大小,因此需要该信息的自动布局计算失败。但它确实知道 View 的上边缘和左边缘在哪里,因此基于这些数据的计算会成功。
这是一个大型应用程序,我已经为 iOS6 和 iOS7 编写了数百行自动布局代码,它们非常适合我。
三天来,我一直在使用 iOS8 进行调整和尝试,但我并不比开始时更聪明。
有人对这里可能出现的问题有任何建议或想法吗?
最佳答案
@robmayoff 对此有一个很好的答案:https://stackoverflow.com/a/26066992/1424669
本质上,在 iOS8 中,您不能再在 View 上调用 setNeedsUpdateConstraints
和 setNeedsLayout
并期望更新 subview 的约束。
您必须在约束发生变化的 View 上调用这些方法。这向后兼容 iOS7。
示例:
假设您有一个带有 Root View self.view
的 ViewController 和一个名为 containerView 的 subview 。 containerView 有一个 NSLayoutConstraint
附加到它,你想改变它(在这种情况下,顶部空间)。
在 iOS7 中,您可以通过请求 Root View 的新布局来更新 VC 中的所有约束:
self.containerView_TopSpace.constant = 0;
[self.view setNeedsUpdateConstraints];
[self.view setNeedsLayout];
在 iOS8 中,您需要在 containerView 上请求布局:
self.containerView_TopSpace.constant = 0;
[self.containerView setNeedsUpdateConstraints];
[self.containerView setNeedsLayout];
关于ios - iOS 8 的自动布局问题,代码在 iOS 7 上运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25987244/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!