使用带有修复底部 UIView 的自动布局调整 UIView 的大小

Posted

技术标签:

【中文标题】使用带有修复底部 UIView 的自动布局调整 UIView 的大小【英文标题】:Resize UIView using autolayout with fix bottom UIView 【发布时间】:2016-04-24 14:41:12 【问题描述】:

当键盘出现时,我想使用Autolayout 调整view1 的大小,我在屏幕底部也有view2,如下所示:

layoutConstraintview1view2 之间是

我创建了IBOutlet 并做到了这一点

-(void)keyboardWillShow:(NSNotification*)n 

    NSDictionary *info  = n.userInfo;
    NSValue      *value = info[UIKeyboardFrameEndUserInfoKey];
    CGRect rawFrame      = [value CGRectValue];
    CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];

    _blc.constant = CGRectGetHeight(keyboardFrame)-35;
    [self.view layoutIfNeeded];



-(void)keyboardWillHide:(NSNotification*)n 
    _blc.constant = 0.0;
    [self.view layoutIfNeeded];

view2 属于height 35,所以当键盘出现和消失时,view1 下会有一个可见的间隙,就像这样

我特意给底座UIView 涂上了浅绿色来说明差距。

在调整view1 的大小时如何弥补这个空白?

【问题讨论】:

当你说 _blc.constant = CGRectGetHeight(keyboardFrame); 时会发生什么? 当键盘出现和消失时,同样的问题差距仍然可见。 【参考方案1】:

所以如果我做对了,你想要做的是用键盘调整 View1 的大小,并将 View2 留在它下面? 如果就是这样,你的观点是这样的:

--------------
View1
View2
--------------

你应该有一个来自 View1.bottom >= View2.top 的垂直空间约束,常量为 0;以及从 View1.bottom 到 Superview.bottom = 的另一个垂直空间限制(无论界面构建器向您建议什么)。您要对 IBOutlet 的约束是最后一个。

当键盘出现/消失时,您会像以前一样更新它的常量。应该这样做。

希望对你有帮助!!

【讨论】:

不,它不起作用,当键盘出现和消失时,同样的问题差距仍然可见。 你是如何更新约束的? 正如你所说的最后一个在 view1 和 superview 底部布局指南之间。在 Xcode 中设置时,它的常量为 35.0,而当 keyboardWillAppear 我设置为与键盘高度相同的常量时。但仍然是同样的问题,差距仍然可见。它在模拟器中很容易看到,动画慢。 view2 在哪里结束?在键盘下方? view2 位于屏幕的末端,其高度为 30.0 并高于其 view1,垂直空间为 0 常量。

以上是关于使用带有修复底部 UIView 的自动布局调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

使用固定大小的子视图和自动布局调整 UIView 的大小不起作用

修复了屏幕底部的 UIView 会忽略 NSLayoutConstraint 的变化

TableView 中 UIView 的 CAGradientLayer 未调整为自动布局

为啥子视图一直停留在底部而不是根据父 UIView 高度进行调整

自动布局。将 UITableView 粘贴到 UIScrollView 的底部

使用自动布局调整 UIView 大小并更新内容