1.当单元格高亮或选中时,UITableViewCell
类不再更改contentView
及其任何子视图的backgroundColor
或isOpaque
属性。 如果要在contentView
内部(包括)内容的任何子视图上设置不透明的backgroundColor
,则单元格突出显示或选中时的外观可能会受到影响。
解决子视图任何问题的最简单方法是确保将backgroundColor
设置为nil
或clear
,并且它们的opaque
属性为false
。
但是,如果需要,您可以覆盖setHighlighted(_:animated :)
和setSelected(_:animated :)
方法,以便在移动到高亮和选定状态时从子视图手动更改这些属性。
2.从iOS 8开始,将UISearchController
与UINavigationController
一起使用需要将顶视图控制器的definesPresentationContext
属性设置为true
。 如果不这样做会导致难以检测和调试的细微错误。
从iOS和iPadOS 13 beta开始,如果视图控制器的navigationItem
具有非零搜索控件,当视图控制器显示在导航控制器中时,UINavigationController
会自动将该视图控制器的definesPresentationContext
属性设置为true。 如果您要定位早期版本的iOS,请在搜索控制器变为活动状态之前设置此属性。
3.UIRefreshControl
类不再直接修改其滚动视图的contentInset
。 相反,它对内容插入的调整将合并到滚动视图的adjustContentInset
中。
唯一的例外是当滚动视图的contentInsetAdjustmentBehavior
设置为UIScrollView.ContentInsetAdjustmentBehavior.never
时,在这种情况下,UIRefreshControl
实例将像以前的版本一样直接修改contentInset
。
4.如果通过在不使用 Auto Layout的情况下覆盖sizeThatFits(_ :)
来在UITableView
中实现 self-sizing cells,则返回的高度将被解释为单元格的 contentView
所需的高度,并且UITableViewCell
会自动添加允许空间所需的任何其他高度 用于cell separator
。 如果以这种方式实现手动自调整大小,则在UITableViewCell上调用sizeThatFits(_ :)
时,单元格的contentView
宽度可以保证准确无误地用于手动布局计算。
5.Trait environments
(例如视图和视图控制器)现在在初始化期间使用traits填充traitCollection属性。 这些初始特征表示特征环境在添加到层次结构时将接收的最终特征的预测。 因为在初始化期间填充的特征只是一个预测,它们可能与实际在层次结构中接收的特征不同。 因此,在可能的情况下,您应该等待执行使用traitCollection
的工作,直到视图或视图控制器的视图移动到层次结构中 - 意味着窗口返回非空值 - 这样您就不必丢弃任何工作 如果实际特征不同,则使用预测的特征完成。 使用traitCollection
的最佳时间是在布局期间,例如layoutSubviews()
,viewWillLayoutSubviews()
或viewDidLayoutSubviews()
内部。
6.只有当特征值发生变化时,才会调用traitCollectionDidChange(_ :)
方法。 重要的是,因为特征集合现在初始化为目标层次结构中最终特征的预测,当初始预测特征与层次结构中的最终特征匹配时,当特征环境添加到层次结构时,将不会调用traitCollectionDidChange(_ :)
。 因为traitCollectionDidChange(_ :)
旨在作为无效回调来通知您一个或多个特征发生了变化,所以请审核此方法的现有实现,以及UIContentContainer
方法willTransition(to:with :)
,以便您可以使用 一直依靠它来触发初始设置。 懒惰地执行使用traitCollection
的工作的最佳位置是在上面讨论的layoutSubviews
方法之一,但请记住,这些布局方法在任何时候布局都会被调用,所以一定要避免在不需要时重复工作。
7.您现在可以启用调试日志记录,以便在您自己的类上调用traitCollectionDidChange(_ :)
或willTransition(to:with :)
时轻松查看。 使用以下启动参数打开日志记录:-UITraitCollectionChangeLoggingEnabled YES
。 您可能希望在使用此启动参数并从Xcode运行应用程序时暂时禁用主线程检查程序,以避免为不相关的类添加额外的日志消息。
8.UITableViewCell
类的contentView
属性始终与前面和后面的相邻附件进行边对边布局。 这简化了布局代码,因此想要正确的默认偏移的开发人员不再需要将其内容与内容视图边框或布局边距对齐,具体取决于尾部是否有附件。 您现在应该始终在单元格内容视图的布局边距上布置代码以获取默认的系统插入。 这些插入将根据单元格中可见的附件自动调整,以匹配系统的默认间距。
9.您现在可以从创建block调用自定义初始化程序,该创建block通过instantiateInitialViewController(creator :)
或instantiateViewController(identifier:creator :)
传递。 这使您可以使用其他上下文和参数初始化视图控制器,同时利用通过Interface Builder在故事板中定义它们。 自定义控制器初始化程序必须调用其super.init
(编码器:)方法并传递它通过创建block接收的编码器参数。
网友评论