Swift UI在没有任何输入的情况下调整其帧的大小

Swift UIView resizing it's frame without any input

提问人:Matthew Gannon 提问时间:5/26/2019 最后编辑:Yogesh PatelMatthew Gannon 更新时间:5/30/2019 访问量:70

问:

我正在尝试创建一个模仿 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 的框架。

任何建议将不胜感激,这让我一整天都发疯。

iOS Swift iPhone UIViview Swift4

评论

0赞 Paulw11 5/26/2019
您是否正在使用自动布局和约束?如果是这样,那么你不应该操纵 - 你应该改变相关约束。frameconstant
0赞 Matthew Gannon 5/26/2019
currentView 的@Paulw11the内部都包含在一个受限于视图的堆栈视图中,但就将其的新版本添加到 self.view 而言,我所做的只是编程并在我提供的代码中完成

答: 暂无答案