将一个 UIView 的约束交换到另一个 UIView
Swap constraints of one UIView to another UIView
我有一个应用程序有一定数量的 UIViews
。我现在需要水平交换他们的位置。比如左端有一个叫X的UIView
,右端有一个叫Y的。单击按钮,我希望 Y 位于 X 所在的位置,而 X 位于 UIView
Y的初始位置。我想,我必须能够通过交换它们的 NSLayoutConstraints
来做到这一点(只是一个猜测)。但我无法让它发挥作用。这个想法可能吗? objective-C
代码是什么?
这些是我尝试第一个代码后得到的结果(几乎是,但不完全)。我只将它应用于视图 KWI 和 DXB。我想要的是 KWI 和 DXB
之间的盲调
如果视图大小相同,则问题不大。假设您的两个视图 X 和 Y 分别称为 xView 和 yView。你可以这样做:
CGRect xViewFrame = xView.frame;
UIViewAutoresizing xViewResizingConstraints = xView.autoresizingMask;
xView.frame = yView.frame;
xView.autoresizingMask = yView.autoresizingMask;
yView.frame = xViewFrame;
yView.autoresizingMask = xViewResizingConstraints;
如果你想要这个动画,你可以把它放在一个 [UIView animateWithDuration: animations:^{}]
块中,它应该可以工作。 (虽然我还没有测试过)
您还可以将 CGRect xViewFrame
更改为使用 CGPoint xViewCenter
并将中心交换为相同大小的视图。
属性 autoresizingMask
告诉程序在屏幕调整大小的情况下要做什么 - 无论是由于方向改变,还是由于设备屏幕尺寸或任何其他原因。
如果视图大小不同,您将不得不处理视图的适当边距,并确保它们不会被剪裁到屏幕之外。
希望对您有所帮助。
编辑
您似乎将 UILabel 用作您的视图或两个视图的子视图。如果是这种情况,请确保您还交换了 UILabel 的 NSTextAlignment。像这样:
NSTextAlignment xTextAlignment = xView.titleLabel.textAlignment;
xView.titleLabel.textAlignment = yView.titleLabel.textAlignment;
yView.titleLabel.textAlignment = xTextAlignment;
我有一个应用程序有一定数量的 UIViews
。我现在需要水平交换他们的位置。比如左端有一个叫X的UIView
,右端有一个叫Y的。单击按钮,我希望 Y 位于 X 所在的位置,而 X 位于 UIView
Y的初始位置。我想,我必须能够通过交换它们的 NSLayoutConstraints
来做到这一点(只是一个猜测)。但我无法让它发挥作用。这个想法可能吗? objective-C
代码是什么?
这些是我尝试第一个代码后得到的结果(几乎是,但不完全)。我只将它应用于视图 KWI 和 DXB。我想要的是 KWI 和 DXB
之间的盲调如果视图大小相同,则问题不大。假设您的两个视图 X 和 Y 分别称为 xView 和 yView。你可以这样做:
CGRect xViewFrame = xView.frame;
UIViewAutoresizing xViewResizingConstraints = xView.autoresizingMask;
xView.frame = yView.frame;
xView.autoresizingMask = yView.autoresizingMask;
yView.frame = xViewFrame;
yView.autoresizingMask = xViewResizingConstraints;
如果你想要这个动画,你可以把它放在一个 [UIView animateWithDuration: animations:^{}]
块中,它应该可以工作。 (虽然我还没有测试过)
您还可以将 CGRect xViewFrame
更改为使用 CGPoint xViewCenter
并将中心交换为相同大小的视图。
属性 autoresizingMask
告诉程序在屏幕调整大小的情况下要做什么 - 无论是由于方向改变,还是由于设备屏幕尺寸或任何其他原因。
如果视图大小不同,您将不得不处理视图的适当边距,并确保它们不会被剪裁到屏幕之外。
希望对您有所帮助。
编辑
您似乎将 UILabel 用作您的视图或两个视图的子视图。如果是这种情况,请确保您还交换了 UILabel 的 NSTextAlignment。像这样:
NSTextAlignment xTextAlignment = xView.titleLabel.textAlignment;
xView.titleLabel.textAlignment = yView.titleLabel.textAlignment;
yView.titleLabel.textAlignment = xTextAlignment;