uiviewcontroller - 使用 UIHostingController 的 UIScrollView 跳跃视图
问题描述
我想将 SwiftUI 视图放入UIScrollView
使用UIHostingController
. 然而,我的按钮“切换”似乎在动画期间在视图中跳跃,即使我使用自动布局来约束视图。
下面的视频说明了动画过程中按钮文字跳跃的问题
struct ExpandableView: View {
@State var expanded = false
var body: some View {
VStack {
Button(action: { withAnimation {expanded.toggle() }}) {
Text("toggle")
}
if expanded {
Text("long text long text long text long text long text long text long text long text long text long text long textlong text long text long text long text long text long text long text long text long text long text long textlong text long text long text long text long text long text long text long text long text long text long text")
.font(.custom("x", fixedSize: 55))
}
}
}
}
class ViewController: UIViewController {
var scrollView: UIScrollView = {
let sv = UIScrollView()
sv.isDirectionalLockEnabled = true
return sv
}()
var contentView: UIView = {
let view = UIView()
return view
}()
let controller = UIHostingController(rootView: ExpandableView())
private var heightConstraint: NSLayoutConstraint?
override func viewDidLoad() {
super.viewDidLoad()
scrollView.frame = view.frame
scrollView.contentSize = CGSize(width: view.bounds.size.width, height: view.bounds.size.height + 200)
view.addSubview(scrollView)
scrollView.addSubview(contentView)
contentView.frame = scrollView.frame
contentView.bounds = scrollView.bounds
controller.view.backgroundColor = .yellow
contentView.addSubview(controller.view)
controller.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
controller.view.topAnchor.constraint(equalTo: contentView.safeAreaLayoutGuide.topAnchor),
controller.view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
controller.view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
])
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.contentSize = CGSize(width: view.bounds.width, height: 100 + controller.view.intrinsicContentSize.height)
}
}
解决方案
推荐阅读
- python - 错误:“urljoin”的类型变量“AnyStr”的值在 mypy 中不能是“Optional[str]”
- visual-studio - 为什么xamarin无法连接调试器?
- amazon-web-services - 控制从 SQS 到 Lambda 的流程
- azure - 在 Azure Devops CI/CD 管道中为 MS Edge 浏览器运行量角器 E2E 测试
- r - 计算给定预期基尼指数的值向量
- unit-testing - 在单元测试中评估多个断言——不要在第一个失败的时候停止
- r - Travis CI - knitr 和依赖项
- class - Android BLE ScanResult List 处理
- python - 汇总多个数据帧的特定列
- gerrit - Gerrit 获得 2 次提交之间的差异