我有一个标准水平布局的集合视图.在呈现视图控制器然后解除它时,集合视图重置焦点回到第一个单元格,即使最后一个焦点单元格不是那个.
我已经定了
self.collectionView.remembersLastFocusedIndexPath = YES;
Run Code Online (Sandbox Code Playgroud)
奇怪的是,只有当我在导航控制器上推动视图控制器时才会发生这种情况.
所以,如果我这样做
[self.navigationController pushViewController:controller animated:YES];
Run Code Online (Sandbox Code Playgroud)
然后解雇,remembersLastFocusedIndexPath不能正常工作.
但是,如果我:
[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
然后它按预期工作.
知道为什么它不能通过导航控制器工作?
小智 7
对我有用的是确保viewController上的preferredFocusView是集合视图:
override weak var preferredFocusedView: UIView? {
return collectionView
}
Run Code Online (Sandbox Code Playgroud)
在此之后记得LastFocusedIndexPath似乎工作.
确保您没有在 collectionView 或 TableView 的 viewWillAppear 上 reloadData()。否则,rememberedFocus 将被重置为默认值(对于我的集合视图,它是中心可见单元格)
默认情况下,系统会记住该位置。您应该通过设置remembersLastFocusedIndexPath为 false 来解决此问题。
您还可以实现该UICollectionViewDelegate方法:\nfunc indexPathForPreferredFocusedViewInCollectionView(collectionView: UICollectionView) -> NSIndexPath?
文档告诉我们:
\n\n\n\n\n这个委托方法的功能相当于重写UICollectionView类\xe2\x80\x99s UIFocusEnvironment协议中的preferredFocusedView方法。如果集合视图\xe2\x80\x99s RemembersLastFocusedIndexPath方法设置为YES,则该方法定义集合视图第一次获得焦点时获得焦点的索引路径。
\n
但对于你的问题,设置remembersLastFocusedIndexPath为 false 应该可以解决它。
| 归档时间: |
|
| 查看次数: |
2501 次 |
| 最近记录: |