iOS改變自定義鍵盤高度

在自定義鍵盤的時候,碰到要根據(jù)橫豎屏,然后改變自定義鍵盤高度的需求,但是發(fā)現(xiàn),無論使用autolayout還是設(shè)置frame去改變高度,都沒有反應(yīng)。后面經(jīng)過查閱,才知道有個Intrinsic Content Size屬性。可以設(shè)置視圖的自定義大小。

關(guān)于 intrinsicContentSize 及 約束優(yōu)先級/content Hugging/content Compression Resistance的詳解,參考如下博客:
https://blog.csdn.net/sodaslay/article/details/78942940

下面是自己的簡單記錄:
改變自定義鍵盤的高度可以設(shè)置鍵盤View的視圖Intrinsic Content Size屬性。
先設(shè)置屬性:

//如果為YES,在AutoLayout中則會自動將view的frame和bounds屬性轉(zhuǎn)換為約束。
self.translatesAutoresizingMaskIntoConstraints = NO;

然后再調(diào)用方法:

[self invalidateIntrinsicContentSize];

大概demo如下:

//IntrinsicView.m
#import "IntrinsicView.h"
 
static bool closeIntrinsic = false;//測試關(guān)閉Intrinsic的影響
 
@implementation IntrinsicView
 
- (instancetype)init
{
    self = [super init];
    if (self) {
        //不兼容舊版Autoreizingmask,只使用AutoLayout
        //如果為YES,在AutoLayout中則會自動將view的frame和bounds屬性轉(zhuǎn)換為約束。
        self.translatesAutoresizingMaskIntoConstraints = NO;
    }
    return self;
}
 
//當用戶設(shè)置extendSize時,提示系統(tǒng)IntrinsicContentSize變化了。
-(void)setExtendSize:(CGSize)extendSize{
    _extendSize = extendSize;
    //如果不加這句話,在view顯示之后(比如延時幾秒),再設(shè)置extendSize不會有效果。
    //本例中也就是testInvalidateIntrinsic的方法不會產(chǎn)生預(yù)期效果。
    [self invalidateIntrinsicContentSize];
}
 
//通過覆蓋intrinsicContentSize函數(shù)修改View的Intrinsic的大小
-(CGSize)intrinsicContentSize{
    if (closeIntrinsic) {
        return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
    } else {
        return CGSizeMake(_extendSize.width, _extendSize.height);
    }
}
@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容