菜鸟教程小白 发表于 2022-12-13 08:46:54

iOS - 更新自动布局约束常量在推送另一个 View Controller 然后返回后停止工作


                                            <p><p>我有一个在 IB( Storyboard)中设计的 UIViewController,它有一个包含一些控件的 UIView。 UIView 有一个自动布局约束来固定它的高度。在我的 UIViewController 子类中,我有一个 <code>IBOutlet NSLayoutConstraint</code> (ivar) 连接到高度约束,以便我可以在代码中调整它。根据用户事件,我通过在 80 到 44 之间修改约束的 <code>constant</code> 属性来扩展/缩小 UIView 的高度,该属性还会向上/向下滑动一个被约束到 UIView 底部的 UITableView。我以前用过这种技术,一切都很好。</p>

<p>我现在在带有 UITabBar 的父容器 UIViewController 中使用此 UIViewController 的 4 个实例。当UITabBar 选项卡选择改变时,我使用<code>insertSubView</code> 换入适当的实例。问题是 UIView 在第一个 subviewController 标签页中无法展开/收缩。在其他 3 个标签页实例中,它工作正常。同样在它工作的 3 个标签页中,如果我将另一个 ViewController 插入堆栈然后返回,则 UIView 的大小调整不再起作用。</p>

<p>在扩展/收缩失败的情况下,我使用 <code>NSLog</code> 来监视约束的 <code>constant</code> 属性的值,并且在每个实例中都会更改它,但是UIView 的高度不受影响。好像约束不再设置为在 UIView 上起作用??</p>

<p>我使用的是 Xcode 5.1,我的应用面向 iOS7。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>最后通过更改 <code>animateWithDuration</code>block 中的代码解决了这个问题,该 block 调用容器控件上的 <code>layoutIfNeeded</code> 以刷新控件的位置。基本上,不只是在父容器控件上调用 <code>layoutIfNeeded</code>,我现在在每个子控件上调用 <code>layoutIfNeeded</code>,这些子控件的位置会因修改约束常量而发生变化。现在所有控件在所有 4 个标签页上都正确重新定位,甚至在从另一个 ViewController 返回之后也是如此。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS - 更新自动布局约束常量在推送另一个 ViewController 然后返回后停止工作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/25033653/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/25033653/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS - 更新自动布局约束常量在推送另一个 View Controller 然后返回后停止工作