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

是否可以在required和nonrequired之间更改nslayoutconstraint的优先级?

南门朗
2023-03-14

如文件所述:

优先级不能从非必需变为必需,也不能从必需变为非必需。

然而,当我试图这样做的时候,我成功了。下面是我的示例代码

var centerConstraint: UILayoutConstraint!
var topConstraint: UILayoutConstraint!

signInButton = UIButton(type: .system)
// Some setting code
...

signUpView = UIView()
// Some setting code
...

signInView.addSubview(signInButton)

centerConstraint = signInButton.centerXAnchor.constraint(equalTo: signInView.centerXAnchor)
centerConstraint.isActive = true
    
topConstraint = signInButton.centerXAnchor.constraint(equalTo: signInView.leadingAnchor)
topConstraint.priority = .defaultHigh
topConstraint.isActive = true

我创建了一个SigninButton和一个SigninViewSigninButton有两个约束。一个优先级为.required(默认),另一个优先级为.defaulthigh

然后,当用户单击该按钮时,我将更改centerconstraint的优先级:

centerConstraint.priority = .defaultLow

这在iOS13和iOS14模拟器上都能正常工作,而不像文档中描述的那样:

如果macOS中的required优先级或iOS中的UILayoutPriorityRequired优先级更改为较低的优先级,或者在将约束添加到视图后,较低的优先级更改为required优先级,将引发异常。

我想知道这份文件是不是过时了?是否可以在required和Nonrequired之间更改UILayoutConstriant的优先级?

共有1个答案

司马彦
2023-03-14

奇怪的是,这确实在IOS12上引发异常,但在1314上却没有引发异常。

有可能文档已经过时,现在是允许的。

或者,它可能不是在这个例子中抛出异常,但在其他情况下可能会这样做。

一般来说,遵循文档(没有官方的冲突信息)是个好主意。

请注意,您可以将优先级设置为.DefaultLow/.DefaultHigh/.Required以外的值...例如:

.priority = UILayoutPriority(rawValue: 999)

得到一个“更强的”执行(如果需要的话)。

 类似资料:
  • 问题内容: Java垃圾收集器以优先级1运行,因此不能保证System.gc()如果被调用将实际执行。 有什么办法可以改变其优先级?如果需要,这将使我能够运行。 问题答案: 垃圾收集器是一个独立线程(如TomHawtin在评论中所提醒,甚至不一定是单个线程),并且其优先级由Java虚拟机确定。这意味着您不能强制垃圾回收。调用告诉运行时环境“现在”可能是运行GC的好时机,但实际上并不能保证立即进行垃

  • 我正在使用std::priority\u队列和std::vector中的一些自定义对象。现在假设在调用top()函数时,有具有相同优先级的对象,我会按从最旧到最新的顺序获取它们。那么我的问题是,有没有可能改变这种行为,以便top()在优先级相同的情况下返回最近的对象?

  • 问题内容: Angular文档说:- DOM的编译是通过调用$ compile()方法执行的。该方法遍历DOM并匹配指令。如果找到匹配项,则将其添加到与给定DOM元素关联的指令列表中。一旦标识了给定DOM元素的所有指令,便 按优先级 对它们进行 排序 并执行其compile()函数。 我相信ng-repeat指令的优先级比自定义指令低,在某些情况下,例如dynamicid和custom指令。角度是

  • Gradle可以设置多个存储库,例如maven和JCenter。但是我意识到gradle总是首先使用jcenter即使我把maven放在jcenter之前(如下所示)。是否有可能使maven(本地回购,并且更快)具有更高的优先级?

  • 问题内容: 从理论上讲,如果我将所有cookie从selenium的对象复制到对象,那么请求是否能够继续进行,就好像会话没有中断一样? 具体来说,我对编写自动化感兴趣,我可以通过Selenium到达网页上的特定位置,然后将特定的下载链接传递到,该链接将下载并验证文件中特定字节的内容,有时甚至是完整文件。(下载的文件的值将根据我在selenium中的相互作用而变化) 问题答案: 是的,肯定可以。以下

  • 我正在使用iBeacons并使用AltBeacon库。 我想问是否有可能改变最后一个信标被看到和didExitRegion被调用之间的时间。 如有任何建议,将不胜感激。