ios – 哪里可以更改“安装”的自动布局约束?

ios – 哪里可以更改“安装”的自动布局约束?,第1张

概述在故事板中使用自动布局时,可以选择使用“已安装”复选框来保持约束.禁用它将导致它的行为就像没有添加该约束一样 – 它将不起作用.您可以在Interface Builder中配置不同大小类的已安装状态,您可以通过将其active属性设置为true或false来以编程方式更改此值. 在我的应用程序中,我想要仅在设备处于纵向状态时才安装约束 – 当旋转到风景时,应该“卸载”.这可以通过取消选中安装的任何 在故事板中使用自动布局时,可以选择使用“已安装”复选框来保持约束.禁用它将导致它的行为就像没有添加该约束一样 – 它将不起作用.您可以在Interface Builder中配置不同大小类的已安装状态,您可以通过将其active属性设置为true或false来以编程方式更改此值.

在我的应用程序中,我想要仅在设备处于纵向状态时才安装约束 – 当旋转到风景时,应该“卸载”.这可以通过取消选中安装的任何宽度紧凑型高度来完成. (虽然这似乎没有正确的工作,因为它打破了这个约束,由于冲突的限制,当旋转到风景,当它甚至不能被安装,但不管UI总是如预期的那样出现)但是没有办法卸载Interface Builder中的iPad的横向限制(两个方向都是常规宽度常规高度).

在旋转设备时,NSLayoutConstraints启用/禁用活动的正确位置在哪里?什么旋转方法会改变状态导致所需的行为 – 只为纵向安装?如果在应用程序启动时没有调用该方法,除了旋转方法之外,还应该采用什么其他方法?

我已经尝试将以下代码放在vIEwDIDLoad和vIEwWillTransitionToSize中,但是在iPad上运行时会导致一些意外的行为:

>以横向启动应用程序会使约束处于活动状态,尽管活动设置为false,但它会破坏约束,并且UI不会按预期显示
>将纵向设置的应用程序启动为true(已经安装在IB中),因此可以按预期方式工作
>以纵向方式启动应用程序并将设备旋转到横向可以按预期方式工作 – 约束被设置为不活动,它不会破坏约束,UI会按预期方式显示
>以纵向方式启动应用程序,旋转到横向并返回纵向,使UI显示正确,但会破坏设置为活动的约束

如果我在Interface Builder中卸载约束,那么运行上面的方案,我基本上是相反的行为.

if size.wIDth > size.height {    self.myConstraint.active = false} else {    self.myConstraint.active = true}
解决方法 我有点迟到要回答,但是当我遇到类似的问题来解决autolayout无法使用iOS 7检测到紧凑型宽度/紧凑型高度的问题时,这是2美分. iOS 7中没有激活的属性,所以我不得不添加/删除它们.

我创建了两种添加和删除约束的方法,这些约束已经在IB上设置,我用IBOutlet属性引用它们.所以,因为我删除它们,不像其他的IB对象,我应该把它们强壮,而不是弱.否则,一旦我删除它们,他们将被毁坏,我将无法再引用它们来重新添加它们.

这是我的约束删除方法:

-(voID)removeiOS7andiPhone4inLandscapetoOrIEntation:(UIInterfaceOrIEntation)toInterfaceOrIEntation{    if( !UIInterfaceOrIEntationIsLandscape(toInterfaceOrIEntation )&&(NSFoundationVersionNumber<=NSFoundationVersionNumber_iOS_7_1)&&( UI_USER_INTERFACE_IdioM() == UIUserInterfaceIdiomPhone )){         // if iPhone with iOS 7 on portrait remove Constraints here    }}

这里是约束加法器方法:

-(voID)addioS7andiPhone4inLandscapetoOrIEntation:(UIInterfaceOrIEntation)toInterfaceOrIEntation{    if( UIInterfaceOrIEntationIsLandscape(toInterfaceOrIEntation )&&(NSFoundationVersionNumber<=NSFoundationVersionNumber_iOS_7_1)&&( UI_USER_INTERFACE_IdioM() == UIUserInterfaceIdiomPhone )){       // if iPhone with iOS 7 on landscape add Constraints here    }}

至于在哪里调用这些方法,如你所试,在vIEwWillAppear中调用它们(不需要调用vIEwWilldisappear)和vIEwWillTransitionToSize(在我的情况下这是willRotatetoInterfaceOrIEntation,因为vIEwWillTransitionToSize仅在iOS 8之后才可用).随后调用它们是有道理的,因为在进行必要的更改之前,只要其中一个将运行,因为检查他们的肖像/横向方向.

这里是我的willRotatetoInterfaceOrIEntation方法定义:

-(voID)willRotatetoInterfaceOrIEntation:(UIInterfaceOrIEntation)toInterfaceOrIEntation duration:(NSTimeInterval)duration{    [super willRotatetoInterfaceOrIEntation:toInterfaceOrIEntation duration:duration];    // this will be run only if orIEntation is on Portrait    [self addioS7andiPhone4inLandscapetoOrIEntation:toInterfaceOrIEntation];    // this will be run only if orIEntation is on Landscape    [self removeiOS7andiPhone4inLandscapetoOrIEntation:toInterfaceOrIEntation];}

并在vIEwWillAppear中进行类似的调用.

注意:确保在这些方法中完全相反,并不一定只在addConstraintMethod中添加约束,并且只能在removeConstraintMethod中删除.在我的情况下,我们都添加和删除每个方法中的约束,所以方法的命名并不能真正反映出它们的真正作用,只要你做出了与你完美的对立.

总结

以上是内存溢出为你收集整理的ios – 哪里可以更改“安装”的自动布局约束?全部内容,希望文章能够帮你解决ios – 哪里可以更改“安装”的自动布局约束?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1096030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存