一段相当简单的代码
var dict: [String: AnyObject] = [:]
dict["key"] = "value"
Run Code Online (Sandbox Code Playgroud)
生成以下编译时错误
Cannot assign value of type 'String' to type 'AnyObject?'
Run Code Online (Sandbox Code Playgroud)
简单的类型检查告诉我那String是AnyObject
"value" is AnyObject // returns true
Run Code Online (Sandbox Code Playgroud)
我可以改变AnyObject到Any,一切都将工作
var dict: [String: Any] = [:]
dict["key"] = "value"
Run Code Online (Sandbox Code Playgroud)
但我想明白为什么我会收到错误?是否String不再AnyObject?或者这是一个错误?
我有一个 UITableView,其中填充了自动调整大小的单元格。\nUITableView设置相当简单:
tableView.estimatedRowHeight = 70\n tableView.rowHeight = UITableViewAutomaticDimension\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n\n\n要启用自动调整表格视图单元格大小,必须将表格视图\xe2\x80\x99s\n rowHeight 属性设置为 UITableViewAutomaticDimension。您还必须\n 为estimatedRowHeight 属性分配一个值。一旦设置了这两个属性,系统就会使用自动布局来计算行xe2x80x99 的实际高度。
\n
配置单元格时,我还禁用/启用一些约束以实现所需的外观。那\xe2\x80\x99s 是事情变得有趣的地方。在重新使用单元之前,单元布局不会更新。字面上地。您可以调用layoutIfNeeded()、setNeedsLayout()或layoutSubviews()任何其他方法,但您无法强制单元格更新其布局。
所有其他方面都工作得很好:标签确实会更改其文本,您可以隐藏/取消隐藏视图,但布局会卡住,直到重新使用单元格为止。
\n\n问题:是什么原因导致这种行为以及如何避免这种行为?
\n所以这是一个无聊的问题,但我无法找出一种非常简单的方法来检测当前关注的项目indexPath.
我环顾四周,希望看到一些非常容易的东西,collectionView.indexPathOfCurrentlyFocusedItem但没有找到任何远近的东西.所以我四处寻找UIFocusEnvironment,UIFocusUpdateContext试图找到类似的东西,试图找到所需的属性,但失败了.因此,我能想到的唯一解决方案是遍历所有可见单元格并找到焦点属性设置为true的单元格.
那么有没有更简单,更优雅的方式来找到当前关注的项目indexPath?(除非通过委托方法跟踪它并将其保存在视图控制器的属性中)
我想要实现的非常简单:每次用户聚焦一个集合视图单元格时,我想让焦点单元格水平居中.似乎我目前的方法根本不起作用.
func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
guard collectionView === self.categoryCollectionView else {
return
}
guard let indexPath = context.nextFocusedIndexPath else {
return
}
collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .CenteredHorizontally, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,集合视图忽略了任何在任何地方滚动的尝试.出于测试目的,我将索引路径更改为集合视图中的最后一个项目的索引路径,但它仅在首次显示集合视图时有效.