Jan*_*Jan 2 autolayout tvos focus-engine
我有一个UICollectionView在具有图像和字幕文本我tvOS应用程序.我设置了一个约束来固定图像下面的标题文本.
当细胞聚焦并且图像增长时,文本不会移动并停留在图像上方.有没有办法设置一个考虑到聚焦图像大小的约束?
你可以使用一个UIImageView属性focusedFrameGuide.它返回一个UILayoutGuide对象,遗憾的是它无法在Interface Builder中使用,但您可以在代码中使用它创建约束.请注意,此约束仅在视图聚焦时才有意义,因此您必须active根据self.focused属性设置其属性.
首先在视图初始化上创建约束:
self.focusedSpacingConstraint = NSLayoutConstraint(item: imageView.focusedFrameGuide, attribute: .BottomMargin, relatedBy: .Equal, toItem: label, attribute: .Top, multiplier: 1, constant: 0)
//add it to the view and set active to false
Run Code Online (Sandbox Code Playgroud)
然后根据焦点激活此约束或默认约束:
override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
coordinator.addCoordinatedAnimations({
self.focusedSpacingConstraint.active = self.focused
self.spacingConstraint.active = !self.focused
//set label's transform and animate layout changes
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用focusedFrameGuide设置标签的高度(作为图像高度的百分比).
这种方法的优点是,constant无论何时图像大小发生变化,您都不必更改(硬编码).
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |