当前位置: 首页 > 知识库问答 >
问题:

移除视图时约束会发生什么

百里君博
2023-03-14

我的问题很简单,但我在文档中找不到任何信息。

从视图层次中删除视图(或移动到其他视图)时,布局约束会发生什么情况?

例如,让容器具有子视图A和B。容器C包含一些约束。然后我们调用removeFromSuperview。A的约束会发生什么情况?

如果我们再次将A添加到C,会发生什么?

共有3个答案

强安和
2023-03-14

但是请注意,如果您有两个独立的父视图A和B,以及一个子视图C,其中C当前是A的子视图,并且具有适当的约束,那么调用[B addSubview:C]将不会清除与A和C相关的任何约束,并且自动布局将开始引发异常,因为这些约束不再与同一层次结构中的视图相关。

在将C添加到B之前,您需要显式调用[C learveFromSuperview]来删除约束。

这在Mac OS X上是正确的-我没有检查iOS

崔绍辉
2023-03-14

因为我也有这个问题,所以我检查了Apple文档,只是为了查看是否有问题,结果证明文档中的约束被删除了。

UIView removeFromSuperview方法的文档说明:

调用此方法会删除引用您要删除的视图或引用您要删除的视图子树中的任何视图的任何约束。

我不确定这是否是去年发布原始问题时记录的,但我只是想我会分享这些信息,以防有人需要它。。。

陶博赡
2023-03-14

将删除约束。如果再次添加,则必须为其创建新的约束,或者如果在删除之前保存约束,则可以将其重新添加。当我这样做时,我会将这样的约束保存到一个名为view1的视图中:

self.portraitConstraints = [NSMutableArray new];
for (NSLayoutConstraint *con in self.view.constraints) {
    if (con.firstItem == self.view1 || con.secondItem == self.view1) {
       [self.portraitConstraints addObject:con];
    }
}
 类似资料:
  • 我的视图控制器中有几个视图,当检测到向上滑动时向上移动,然后当检测到向下滑动时向下移动。我使用CGRectOffset通过调整y原点来强制视图移动。我现在使用IB对视图施加了约束,我不确定移动视图的最佳方法是什么,以便它们最终在iPhone 5、6和6上的正确位置。 目前我正在做这样的事情: 用比值改变常数是否更好?因此,对于上面的约束,不使用338,这样做是否更好:

  • 在没有接口构建器的情况下创建视图方面,我是新手。我正在使用创建视图! 如何在重用约束之前删除它?

  • 我有一个UIView,其中有一个UILabel作为子视图。 现在我用动画改变UIView的宽度(改变约束的常量属性)并在UIView动画中调用layoutIfNeed...( 视图正在正常调整大小,但UILabel(子视图)将字体大小更改为“结束”大小,但没有像uiview那样正确设置动画。 根据WWDC 2012会话,如果仅更改superview的常量,则子视图应设置动画。 UILabel的最小

  • 所以我正在学习如何使视图从屏幕外变成动画,用作滑块菜单。 我改编了这段代码,从如何在Swift中使用约束对UIView进行动画制作? 什么是自我。看法layoutIfNeeded()部分代码如何? 2.为什么在动画之前和期间编码为2x? 注:如果我注释掉第一个自我。看法layoutIfNeeded()没有任何变化,但如果我注释掉第二个self。看法layoutIfNeeded()移动不再设置动画,

  • 问题内容: 假设我有一个查询发送到我的SQL-Server数据库,它花费了30秒钟以上,并且我的程序引发了SQL Query Timeout异常。查询是否仍然在我的数据库中徘徊,或者在引发异常后立即终止? 问题答案: 客户端使用注意事件向服务器发出查询超时信号。注意事件只是SQL Server客户端可以发送给它的TDS数据包的一种不同类型。除了连接/断开连接,T-SQL批处理和RPC事件外,客户端

  • 我正在将错误消息添加到登录屏幕。 虽然代码运行良好,并且执行我希望它执行的操作。它会在执行时导致约束错误。 以下是受影响的约束: 下面是导致errorView出现的函数。 如何在不破坏约束的情况下更改约束? 我尝试self.view.update约束()-但是什么也没有做。我还尝试在添加约束之前删除它们,但是仍然有一个错误。 任何帮助都将不胜感激! 编辑: 我找到了一个Objective-c解决方