如果在录音或通话期间状态栏增加,iOS 自定义键盘的框架会缩小 20 点?

标签 ios view autolayout statusbar custom-keyboard

在重新编码或通话期间,我在 iOS(真实)设备上遇到键盘扩展问题(iOS 模拟器没有红色状态栏)。由于状态栏增加了 20 点,自定义键盘也在 Y 轴上移动了 20 点,并将其 高度 降低到 196 点(应该是 216 点)。但是,当我打印 view.frame 时,它显示 {{0.0, 0.0}, {320.0, 196.0}}。

Here is the screenshot .

如果我使用 Storyboard而不是以编程方式添加 View ,则效果很好。一开始我以为是topLayoutGuide.length的原因,结果调试区显示0.0。

我试图找到解决方案或与此问题相关的任何主题,但似乎只有我一个人面对它。 :(

最佳答案

对我有用的解决方法:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    if (CGRectGetMinY(self.view.superview.frame) > 0.f) {
        CGRect frame = self.view.superview.frame;
        frame.origin.y = 0.f;
        [self.view.superview setFrame:frame];
    }
}

基本上,我们正在寻找 superview 的框架,如果它移动了,我会“调整”它。

编辑:

作为TomSawyer提到,以前的解决方案存在问题。这个应该可以同时解决这两个问题。

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    CGRect frame = self.view.superview.frame;
    CGFloat dy = CGRectGetMinY(frame);
    if (dy > 0.f) {
        frame.origin.y = 0.f;
        frame.size.height += dy;
        [self.view.superview setFrame:frame];
    }
}

关于如果在录音或通话期间状态栏增加,iOS 自定义键盘的框架会缩小 20 点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33028589/

相关文章:

ios - 动画从中心向边缘展开,下面露出parentView

android - 为什么通过代码在Android中截取多个 View 时VideoView是黑色的?

Vim - 当移动到具有相同缓冲区的其他窗口时调用缓冲区事件

ios - 从右到左语言中基于百分比的自动布局布局

ios - 以编程方式使用自动布局将 subview 添加到 UICollectionView 不起作用

ios - 动态表中自定义单元格中的按钮 : how to know which row in action method?

ios - AFNetworking 2 和后台任务

ios - tableview 单元格中的 uicollection View 出现错误 : Index out of range, 为什么?

sql - 在特定数据库中创建 SQL Server View

swift - 自动布局不起作用