ios - 以编程方式使用大小类

标签 ios interface-builder autolayout ios8 size-classes

我(希望)观看了所有相关的 WWDC2014 session 视频并阅读了文档,所以这个问题主要是为了证实我的怀疑,但请教育我。

我想做的是使用自动布局动画 View 。这本身不是问题。但是这些动画的端点随着不同的方向而变化。我想我可以使用大小类在旋转时自动移动 View ,但 Apple 的开发人员指南说动画必须以编程方式完成,据我所知,大小类是 Interface-Builder-only 的东西。

我的另一个想法是使用自定义布局指南,例如 IB 提供的顶部/底部指南,但它们似乎是硬编码的。

我能做的最后一件事是在监听旋转事件后手动更新约束,但这并不是什么新鲜事,而且我觉得大小类应该不仅仅可用于静态接口(interface)。我是否高估了他们的目的?

TLDR:给定一个 View 可以作为原点的两个点 A 和 B(由于动画),我如何使用大小类或类似的东西移动这两个点?

最佳答案

在深入研究文档后,我终于找到了一些有用的东西。 UIContentContainer协议(protocol)定义 willTransitionToTraitCollection(:withTransitionCoordinator:) ,并且该方法的第一个参数(UITraitCollection)包含水平和垂直尺寸类别以及一个UIUserInterfaceIdiom。 (这可用于了解应用程序是在 iPhone 还是 iPad 上运行,尽管大多数情况下都应使用尺寸等级)。

此外,由于 iOS 8 在横向 View 中隐藏了状态栏,traitCollectionDidChange(previousTraitCollection:)是更改发生后调用的相应方法,因此 UIApplication.sharedApplication().statusBarHidden 的值调用此方法时已更改。可用于 UIScrollViewcontentInset例如。

最后,如果你需要精确的屏幕尺寸(当然是点数,但上面提到的特征集合也知道像素密度),有 viewWillTransitionToSize(:withTransitionCoordinator:) .

希望这对其他人也有帮助。

关于ios - 以编程方式使用大小类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25466554/

相关文章:

ios - 当用户在我的应用程序中滚动 UIViewCollectionCells 列表时出现奇怪的行为(每个单元格中的数据随机变化)

iphone - 从 CGPoints 数组中设置按钮框架(仅 x 和 y 位置)

iphone - CALayer 子类的 IB 插件

ios - 使用自动布局支持不同 iPhone 尺寸的问题(包括图表)

ios - 当 UITableView 加载并在滚动后得到修复时,UILabel 向左移动

ios - 以编程方式检测来自 UI 元素的事件

php - iOS 和 PHP 使用的时间戳格式有区别吗?

objective-c - Cocoa:我需要初始化值转换器才能在 IB 中使用吗?

ios - 更改 Interface Builder Storyboard的方向

ios - 应用程序在 isHidden 属性上崩溃