使用带有修复底部 UIView 的自动布局调整 UIView 的大小
Posted
技术标签:
【中文标题】使用带有修复底部 UIView 的自动布局调整 UIView 的大小【英文标题】:Resize UIView using autolayout with fix bottom UIView 【发布时间】:2016-04-24 14:41:12 【问题描述】:当键盘出现时,我想使用Autolayout
调整view1
的大小,我在屏幕底部也有view2
,如下所示:
layoutConstraint
在view1
和view2
之间是
我创建了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 高度进行调整