【问题标题】:Change frame programmatically with auto layout使用自动布局以编程方式更改框架
【发布时间】:2014-07-02 12:49:57
【问题描述】:

我有一个带有自动布局的UITableView,当GADBannerView 出现在屏幕底部时,我需要降低高度。

不幸的是,使用自动布局无法修改框架。解决方案是删除自动布局并手动设置框架。这是非常危险的,因为我所有的应用程序都可以在 3.5' 和 4.0' 显示器上正常运行,而移除 Auto Layout 会增加一个新的测试阶段和更多的工作量。

即使启用了自动布局,有没有办法改变框架?

【问题讨论】:

标签: ios objective-c uitableview autolayout


【解决方案1】:

你可以找到这样的约束

extension UIView {
    var heightConstaint: NSLayoutConstraint? {
        get {
            for constraint: NSLayoutConstraint in constraints {
                if constraint.firstAttribute == .height {
                    if constraint.relation == .equal {
                        return constraint
                    }
                }
            }
            return nil
        }

        set{
            setNeedsLayout()
        }
    }
}

【讨论】:

    【解决方案2】:

    让你的UITableView对底部布局的约束设置为0,创建一个IBOutlet。现在让您的 GADBannerView 高度为 40,因此更改您的 outlet.constant = 40; 有关如何制作 IBOutlet 并更改其值的更多信息,请查看 thisthis 希望这会有所帮助。

    编辑:对于那些寻求例如的人,请遵循这些简单的步骤(因为这是公认的答案,我认为值得举一个例子。感谢@manujmv 这个例子)

    1. 在界面中为视图创建高度约束。

    2. 然后在你的类中为这个约束添加一个 IBOutlet 对象。 例如:

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

    在您的连接面板中连接此对象。

    1. 然后在需要时更改此约束的值

      self.heightConstraint.constant = 40;

    【讨论】:

    • 参加聚会有点晚了,但是将self.translatesAutoresizingMaskIntoConstraints = YES; 添加到您的视图中可能会消除修改约束常量的需要。
    • @JohnRogers 的评论其实是正确的答案!
    【解决方案3】:

    还有一件事,一旦你改变了约束,你必须调用[self.view layoutIfNeeded]; 方法。

    享受:)

    【讨论】:

      【解决方案4】:

      与其尝试更改视图的框架,不如使用自动布局添加高度约束并减小此约束的值。执行以下步骤:

      1. 在界面中为您的视图创建高度约束。
      2. 然后在你的类中为这个约束添加一个 IBOutlet 对象。例如,

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

        在您的连接面板中连接此对象。

      3. 然后在需要时更改此约束的值

         self.heightConstraint.constant = 40;
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多