ios – 无法更改为IB中的不同大小类定义的约束IBOutlet

ios – 无法更改为IB中的不同大小类定义的约束IBOutlet,第1张

概述我为这个案子制作了一个特殊的测试应用程序(对不起,已经删除了) 我在Storyboard中添加了一个关于我的控制器视图的视图,在Interface Builder中设置了AutoLayout约束,并使其中一个(垂直空间)对于不同的大小类是不同的. Screenshot from IB 所以任何高度的值都是100,任何宽度都是0,常规高度是0,常规宽度. 它的效果很好,在iPhone垂直距离顶部是1 我为这个案子制作了一个特殊的测试应用程序(对不起,已经删除了)

我在Storyboard中添加了一个关于我的控制器视图的视图,在Interface Builder中设置了autoLayout约束,并使其中一个(垂直空间)对于不同的大小类是不同的. Screenshot from IB

所以任何高度的值都是100,任何宽度都是0,常规高度是0,常规宽度.
它的效果很好,在iPhone垂直距离顶部是100,在iPad上它是0.

此外,我为此约束制作了IBOutlet,并希望在运行时将其更改为10

@property (weak,nonatomic) IBOutlet NSLayoutConstraint *topVerticalConstraint;

似乎我无法改变它,因为它没有任何效果

- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    self.topVerticalConstraint.constant = 10; // it doesn't work}

虽然它在我删除Interface Builder中常规高度,常规宽度的值时有效.

我想念大小班吗?

解决方法 问题是,在-vIEwWillLayoutSubvIEws和-vIEwDIDLayoutSubvIEws之间发生布局事件之前,约束尚未完全定义,其中来自IB的所有参数都起作用.
我的经验法则是:

>如果您使用框架手动定位视图,您可以在-vIEwDIDLoad之前完成,
>如果您使用自动布局约束进行定位,请尽早进行调整-vIEwDIDLayoutSubvIEws;

第二个陈述仅考虑对IB中的约束进行代码调整.您在-vIEwDIDLoad中进行的调整将被布局期间在IB中设置的参数覆盖.如果使用代码添加约束,可以在-vIEwDIDLoad中设置它们,因为没有任何内容可以覆盖它们.

我已经改变了你的代码并且它有效:

#import "VIEwController.h"@interface VIEwController ()@property (weak,nonatomic) IBOutlet NSLayoutConstraint *topVerticalConstraint;@property (weak,nonatomic) IBOutlet UIVIEw *square;@property (assign,nonatomic) BOol firstLayout;@end@implementation VIEwController- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    self.firstLayout = YES;}- (voID)vIEwDIDLayoutSubvIEws {    [super vIEwDIDLayoutSubvIEws];    if (self.firstLayout) {        self.topVerticalConstraint.constant = 10;        self.firstLayout = NO;    }}@end

请注意,在VIEwController的生命周期中多次调用-vIEwDIDLayoutSubvIEws,因此您必须确保在初始加载时仅进行一次调整.

总结

以上是内存溢出为你收集整理的ios – 无法更改为IB中的不同大小类定义的约束IBOutlet全部内容,希望文章能够帮你解决ios – 无法更改为IB中的不同大小类定义的约束IBOutlet所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存