【问题标题】:On iOS 15, the UIHostingController is adding some weird extra padding to its hosting SwiftUI view (_UIHostingView)在 iOS 15 上,UIHostingController 为其托管 SwiftUI 视图 (_UIHostingView) 添加了一些奇怪的额外填充
【发布时间】:2021-11-14 20:09:29
【问题描述】:

在 iOS 15 上,UIHostingController 为其托管 SwiftUI 视图 (_UIHostingView) 添加了一些奇怪的额外填充。

请参见下面的屏幕截图(蓝色 = 额外空间,红色 = 实际视图):

有人知道为什么会这样吗?

我已经报告了这个错误,Apple 员工:FB9641883

PD:我有一个工作项目来重现我附加到反馈助手问题的问题。如果有人想要,我也可以上传。

【问题讨论】:

    标签: swiftui ios15 uihostingcontroller uihostingview


    【解决方案1】:

    我试图找出为什么会在没有运气的情况下发生这种情况。我发现修复它的唯一方法是在 UIHostingController 的子类中为其内在内容大小设置高度约束:

        private var heightConstraint: NSLayoutConstraint?
    
        override open func viewDidLoad() {
            super.viewDidLoad()
            if #available(iOS 15.0, *) {
                heightConstraint = view.heightAnchor.constraint(equalToConstant: view.intrinsicContentSize.height)
                NSLayoutConstraint.activate([
                    heightConstraint!,
                ])
            }
        }
    
        override open func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
            heightConstraint?.constant = view.intrinsicContentSize.height
        }
    

    【讨论】:

      【解决方案2】:

      我发现子类化 UIHostingController 如下解决了额外填充的问题:

      final class HostingController<Content: View>: UIHostingController<Content> {
          override func viewDidLayoutSubviews() {
              super.viewDidLayoutSubviews()
      
              view.setNeedsUpdateConstraints()
          }
      }
      

      它还修复了 UIHostingController 在其 SwiftUI View 更改大小时无法正确调整大小的问题。

      【讨论】:

      • 哇这确实有效 :D 为什么我没想到这个,非常聪明的尝试,谢谢 Sebastian!
      • 我正在尝试从 SwiftUI 视图中创建一个 UIImage,但上面仍然会产生偏移/剪切的图像。
      • 这对我不起作用
      • Content 视图变大时不起作用。
      猜你喜欢
      • 2021-09-10
      • 2021-11-17
      • 2018-03-14
      • 2013-07-20
      • 2019-11-25
      • 2015-04-02
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多