updateUikit视图whiedidlayoutsubviewscallback从swftui包装器获取call

问题描述 投票:0回答:0

Hello团队我注意到,我们在应用程序中遇到了一个问题,每当用户打开键盘出现时应用程序冻结的TextField时,都会跟踪此行为,并且在Uiview

上进行了UI破坏设计。

这种视图是可扩展的,原始尺寸为80

当它扩展时206.33

这是视图代码我更改颜色以轻松检查对方在内部创建的视图

private lazy var sharedUIPlaybackView: UIView = { let containerView = UIView().withAutoLayout() let propertySearchCriteria = PropertySearchCriteriaBuilder(hotelSearchParameters: viewModel.hotelSearchParameters).criteria var swiftUIView: SwiftUIView<LodgingPlaybackWrapper>! = nil swiftUIView = SwiftUIView( LodgingPlaybackWrapper(propertySearchCriteria: propertySearchCriteria, playbackUpdateNotificationSender: playbackUpdateNotificationSender, componentHandler: { [weak self] componentId in self?.componentReady(componentId) }), viewDidLayoutSubviewsCallback: { [weak self] in let extraPadding = self?.playbackViewExtraPadding ?? Spacing.spacing8x let newHeight = swiftUIView.frame.size.height + extraPadding // if newHeight != self?.sharedUIPlaybackViewHeightConstraint?.constant { // self?.sharedUIPlaybackViewHeightConstraint?.constant = 206.33 // }else { // self?.sharedUIPlaybackViewHeightConstraint?.constant = 80 // } } ).withAutoLayout().withAccessibilityIdentifier("test") // sharedUIPlaybackViewHeightConstraint = containerView.heightAnchor.constraint(equalToConstant: 0) // sharedUIPlaybackViewHeightConstraint?.isActive = true containerView.backgroundColor = .blue swiftUIView.backgroundColor = .red containerView.addSubview(swiftUIView) containerView.addConstraints([ swiftUIView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: playbackViewTopConstant), swiftUIView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: Spacing.spacing4x), swiftUIView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -Spacing.spacing4x), swiftUIView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -Spacing.spacing3x), swiftUIView.heightAnchor.constraint(equalToConstant: 206.33) ]) return containerView }()
devs创建了此函数ViewDidlayoutsubviewscallback,以连接包装器上的用户交互并在Uikit上使用。
这是函数上的数学的一部分变得怪异,并通过崩溃的视图来弄乱了代码。

viewDidLayoutSubviewsCallback: { [weak self] in let extraPadding = self?.playbackViewExtraPadding ?? Spacing.spacing8x let newHeight = swiftUIView.frame.size.height + extraPadding if newHeight != self?.sharedUIPlaybackViewHeightConstraint?.constant { self?.sharedUIPlaybackViewHeightConstraint?.constant = newHeight } } ).withAutoLayout().withAccessibilityIdentifier("test") sharedUIPlaybackViewHeightConstraint = containerView.heightAnchor.constraint(equalToConstant: 0) sharedUIPlaybackViewHeightConstraint?.isActive = true

i我评论了这项数学,因为正在崩溃该应用程序,而不是给出一个动态高度,而是将其作为恒定约束作为默认高度的固定高度,这是我解决UI的问题的方式,但是我仍然需要每次单击用户单击并通过方法
viewDidLayoutSubviewsCallback

来更新视图,
我该怎么办? 我试图在方法

上添加一个条件

if newHeight == 80 { containerView.addConstraints([ swiftUIView.heightAnchor.constraint(equalToConstant: 80.0) ]) containerView.layoutIfNeeded() } else { containerView.addConstraints([ swiftUIView.heightAnchor.constraint(equalToConstant: 206.33) ]) containerView.layoutIfNeeded() }

像这样,但它不起作用

这是它的外观,其恒定值为206.33

当开放时看起来不错

在UI按钮的框架之间单击和App Logic Communication之间的通知解决了这一求解。

swift uiview
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.