Hello团队我注意到,我们在应用程序中遇到了一个问题,每当用户打开键盘出现时应用程序冻结的TextField时,都会跟踪此行为,并且在Uiview
上进行了UI破坏设计。这是视图代码我更改颜色以轻松检查对方在内部创建的视图
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之间的通知解决了这一求解。