提问人:Matthew Gannon 提问时间:5/26/2019 最后编辑:Yogesh PatelMatthew Gannon 更新时间:5/30/2019 访问量:70
Swift UI在没有任何输入的情况下调整其帧的大小
Swift UIView resizing it's frame without any input
问:
我正在尝试创建一个模仿 AppStore 中卡片行为的应用程序。我目前的方法是在选择集合视图单元格(我加载到单元格中的自定义 UIView)的副本时创建该副本,将其添加到与单元格完全相同的框架中的视图中,然后从那里展开它。但是,即使我能够为视图分配正确的框架,在“didSelectItemAt”完成后的某个时候,视图会将其框架更改为原点 (0,0) 并更改最小宽度和高度以适合其内容。
我注意到的一件有趣的事情是,我能够对它进行动画处理,并看到它从预期的原点移动到 (0,0)。这是如果我使用 UIView.animate 几秒钟(或使用 CMD-T 进行慢速动画)并在动画块中插入 self.view.layoutSubviews()。
var currentView:AirportView?
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) as? AirportCollectionViewCell {
whiteView.alpha = 0.3
currentView = .get()
self.view.addSubview(currentView!)
currentView!.frame = self.view.convert(cell.frame, from: self.collectionView)
print("Relative frame is \(self.view.convert(cell.frame, from: self.collectionView))")
print("Current view frame is \(currentView!.frame)")
}
}
@objc func reset(_ sender: UIView) {
print("Reset cview frame is \(currentView!.frame)")
whiteView.alpha = 0
currentView?.removeFromSuperview()
currentView = nil
self.collectionView.isScrollEnabled = true
}
以下是 print 语句的输出:
Relative frame is (0.0, 136.0, 375.0, 415.0)
Current view frame is (0.0, 136.0, 375.0, 415.0)
Reset cview frame is (0.0, 0.0, 323.6666666666667, 458.6666666666667)
如果我在分配新帧后立即调用 self.view.layoutSubviews(),则输出为:
Relative frame is (0.0, 136.0, 375.0, 415.0)
Current view frame is (0.0, 0.0, 323.6666666666667, 414.6666666666667)
Reset cview frame is (0.0, 0.0, 323.6666666666667, 458.6666666666667)
因此,我假设视图在幕后的某个地方布置子视图,但我不确定为什么这会改变 currentView 的框架。
任何建议将不胜感激,这让我一整天都发疯。
答: 暂无答案
评论
frame
constant