ios – 在viewDidLoad或viewWillAppear中更改NSLayoutContraint常量不起作用

ios – 在viewDidLoad或viewWillAppear中更改NSLayoutContraint常量不起作用,第1张

概述我想做这样的事情: - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"%@", self.tableViewHeight); self.tableViewHeight.constant = 0; NSLog(@"%@", self.tableViewHe 我想做这样的事情:

- (voID)vIEwWillAppear:(BOol)animated{    [super vIEwWillAppear:animated];    NSLog(@"%@",self.tableVIEwHeight);    self.tableVIEwHeight.constant = 0;    NSLog(@"%@",self.tableVIEwHeight);    [self.tableVIEw setNeedsUpdateConstraints];    [self.tableVIEw setNeedsLayout];    [self.vIEw setNeedsUpdateConstraints];    [self.vIEw setNeedsLayout];}

但有时这项工作有时并非如此.我总是在日志中看到正确的消息:

<NSLayoutConstraint:0x9ebe7a0 V:[UItableVIEw:0xa345a00(304@500)] priority:500><NSLayoutConstraint:0x9ebe7a0 V:[UItableVIEw:0xa345a00(0@500)] priority:500>

为什么会这样?如何在UI变为可见之前更改NSLayoutConstraints属性?

更新:

这段代码20次20次(但我现在总是这样认为):

- (voID)vIEwWillAppear:(BOol)animated{    [super vIEwWillAppear:animated];    dispatch_async(dispatch_get_main_queue(),^{        self.tableVIEwHeight.constant = 0;        [self.vIEw setNeedsUpdateConstraints];    });}

告诉我为什么会发生这种情况?

更新2:

看起来像以前的代码仍然无法工作,但这有效:

- (voID)vIEwWillAppear:(BOol)animated{    [super vIEwWillAppear:animated];    self.topVIEwHeight.constant += self.tableVIEwHeight.constant;    self.tableVIEwHeight.constant = 0;    [self.vIEw setNeedsUpdateConstraints];}

更新3:

我永远不会将相同的优先顺序(如500)设置为具有连接视图的几个约束……

解决方法 我注意到你的优先级为500,这意味着你愿意打破这个约束以满足其他约束.我想知道你有什么其他限制.如果在Interface Builder中执行此 *** 作,它会产生一种恼人的倾向(至少在Xcode 4.6.x中),以添加它认为需要的任何约束以消除歧义.您可能希望检查是否没有其他高度限制,或者优先使用的顶部和底部约束.

最重要的是,你设置常量的技术很好(想想,我发现只使用setNeedsLayout就足够了),问题可能还有其他可能挥之不去的约束.

如果将此约束的优先级更改为1000,如果存在冲突约束,则会出现错误,这有助于诊断问题.但事实上,你告诉自动布局,如果忽略这个高度约束而支持其他冲突约束(优先级更高或相同),则可以.通过将优先级设置为1000,您说您永远不希望忽略此约束.

总结

以上是内存溢出为你收集整理的ios – 在viewDidLoad或viewWillAppear中更改NSLayoutContraint常量不起作用全部内容,希望文章能够帮你解决ios – 在viewDidLoad或viewWillAppear中更改NSLayoutContraint常量不起作用所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存