iOS改变自定义键盘高度

在自定义键盘的时候,碰到要根据横竖屏,然后改变自定义键盘高度的需求,但是发现,无论使用autolayout还是设置frame去改变高度,都没有反应。后面经过查阅,才知道有个Intrinsic Content Size属性。可以设置视图的自定义大小。

关于 intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance的详解,参考如下博客:
https://blog.csdn.net/sodaslay/article/details/78942940

下面是自己的简单记录:
改变自定义键盘的高度可以设置键盘View的视图Intrinsic Content Size属性。
先设置属性:

//如果为YES,在AutoLayout中则会自动将view的frame和bounds属性转换为约束。
self.translatesAutoresizingMaskIntoConstraints = NO;

然后再调用方法:

[self invalidateIntrinsicContentSize];

大概demo如下:

//IntrinsicView.m
#import "IntrinsicView.h"
 
static bool closeIntrinsic = false;//测试关闭Intrinsic的影响
 
@implementation IntrinsicView
 
- (instancetype)init
{
    self = [super init];
    if (self) {
        //不兼容旧版Autoreizingmask,只使用AutoLayout
        //如果为YES,在AutoLayout中则会自动将view的frame和bounds属性转换为约束。
        self.translatesAutoresizingMaskIntoConstraints = NO;
    }
    return self;
}
 
//当用户设置extendSize时,提示系统IntrinsicContentSize变化了。
-(void)setExtendSize:(CGSize)extendSize{
    _extendSize = extendSize;
    //如果不加这句话,在view显示之后(比如延时几秒),再设置extendSize不会有效果。
    //本例中也就是testInvalidateIntrinsic的方法不会产生预期效果。
    [self invalidateIntrinsicContentSize];
}
 
//通过覆盖intrinsicContentSize函数修改View的Intrinsic的大小
-(CGSize)intrinsicContentSize{
    if (closeIntrinsic) {
        return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
    } else {
        return CGSizeMake(_extendSize.width, _extendSize.height);
    }
}
@end

你可能感兴趣的:(iOS改变自定义键盘高度)