gpt4 book ai didi

ios - 自动布局、屏幕旋转和 UIView 动画

转载 作者:行者123 更新时间:2023-12-01 19:13:01 29 4
gpt4 key购买 nike

我有一个 UIView 问题,我将它添加到屏幕底部并在按下按钮时为其设置动画以填充大部分屏幕。 View 将按预期上下动画并旋转。如果我尝试在横向上设置动画,它会中断并给我错误消息:

*** Assertion failure in -[UIScrollView _edgeExpressionInContainer:vertical:max:], /SourceCache/UIKit_Sim/UIKit-2380.17/NSLayoutConstraint_UIKitAdditions.m:2174
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Autolayout doesn't support crossing rotational bounds transforms with edge layout constraints, such as right, left, top, bottom. The offending view is: <UIView: 0x9199340; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = RM+BM; layer = <CALayer: 0x91993d0>>'

有问题的观点是 self.view。

我如何创建 UIView:
[self.myContentView addSubview:subBar.filterListView];

[self.myContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[filterListView]|"
options:0
metrics:nil
views:@{@"filterListView": subBar.filterListView}]];

subBar.filterListView.bottomConstraint = [NSLayoutConstraint constraintWithItem:subBar.filterListView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.mapView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];

subBar.filterListView.topConstraint = [NSLayoutConstraint constraintWithItem:subBar.filterListView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.mapView
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];

[self.myContentView addConstraint:subBar.filterListView.bottomConstraint];
[self.myContentView addConstraint:subBar.filterListView.topConstraint];

self.myContentView 是一个占据整个 self.view 的 UIView:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(contentView)]];

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(contentView)]];

要为 subBar.filterListView 设置动画,我删除了顶部和底部约束,重新分配它们,添加它们并设置动画:
[self.myContentView removeConstraint:view.topConstraint];
[self.myContentView removeConstraint:view.bottomConstraint];

view.topConstraint = [NSLayoutConstraint constraintWithItem:view
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.topToolBar
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];

view.bottomConstraint.constant -= SUB_BAR_SIZE.height;

[self.myContentView addConstraint:view.topConstraint];
[self.myContentView addConstraint:view.bottomConstraint];

[self.myContentView setNeedsUpdateConstraints];

[UIView animateWithDuration:.25 animations:^{
[self.myContentView layoutIfNeeded];
}];

代码在旋转时是否与顶部和底部混淆?它认为肖像顶部是风景的左侧吗?

最佳答案

好的,我找到了解决方案。它没有解决上述问题,而是找到了另一种方法来解决它。

我将约束更改为 Visual Format Language (VFL) 方法:

subBar.filterListView.verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[filtersSubBar][filterListView(0)]" options:0
metrics:nil
views:@{@"filterListView": subBar.filterListView, @"filtersSubBar" : subBar.filtersSubBar}];

我认为问题在于使用属性 NSLayoutAttributeTop , NSLayoutAttributeRight等导致问题的原因。

自动布局无法处理旋转并尝试使用 NSLayoutAttributeTop什么时候应该改为 NSLayoutAttributeRight表达新的方向。我想我们可以手动更改约束。

似乎 VFL 处理它的方式不同并且不使用属性?

这感觉好像它要么是一个错误,要么只是 iOS 的一个缺点。

关于ios - 自动布局、屏幕旋转和 UIView 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139909/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com