我有一个带有自动布局的UITableView
,当屏幕底部出现GADBannerView
时,我需要减小高度。
不幸的是,使用自动布局是无法修改框架的。解决方法是删除自动布局并手动设置框架。这非常危险,因为所有我的应用程序在3.5英寸和4.0英寸的显示器上都运行良好,并且删除自动布局会增加新的测试阶段和更多工作量。
即使启用了自动布局,是否有一种方法可以更改框架?
我有一个带有自动布局的UITableView
,当屏幕底部出现GADBannerView
时,我需要减小高度。
不幸的是,使用自动布局是无法修改框架的。解决方法是删除自动布局并手动设置框架。这非常危险,因为所有我的应用程序在3.5英寸和4.0英寸的显示器上都运行良好,并且删除自动布局会增加新的测试阶段和更多工作量。
即使启用了自动布局,是否有一种方法可以更改框架?
将你的UITableView
底部布局的约束设置为0,并创建一个IBOutlet
。现在假设你的GADBannerView
高度是40,所以改变你的outlet.constant = 40;
。关于如何创建IBOutlet
并更改其值的更多信息,请参考此处或此处,希望这可以帮助到你。
编辑:对于那些寻求示例的人,请遵循以下简单步骤(由于这是被接受的答案,我认为有一个示例是值得的。感谢@manujmv提供的示例)。
在您的界面中为视图创建高度约束。
然后在您的类中为此约束添加一个IBOutlet
对象。
例如:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
在连接面板中连接此对象。
然后根据需要更改此约束的值。
self.heightConstraint.constant = 40;
self.translatesAutoresizingMaskIntoConstraints = YES;
添加到您的视图中可能会消除修改约束常数的需求。 - John Rogers不要试图更改视图的框架,使用自动布局添加高度约束并减小此约束的值。执行以下步骤:
然后在您的类中为此约束添加一个 IBOutlet 对象。例如:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
将此对象连接到您的连接面板中。
然后在需要时更改此约束的值。
self.heightConstraint.constant = 40;
还有一件事,当您更改约束条件时,您必须调用 [self.view layoutIfNeeded];
方法。
祝您愉快 :)
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()
}
}
}
GADBannerView
出现时更改其值。 - Bharat