问题描述
|
我有一个全屏UITextView,每当出现键盘时它都会变小,以使键盘不会覆盖任何文本。作为此过程的一部分,我还更改了textView的底部contentInset,因此,当存在键盘时,文本下方的空间较小,而当没有键盘时,文本下方的空间较大。
问题是,每当用户点击底部附近的textView开始编辑时,底部contentInset都会自发地将其自身重置为32。我从此答案中知道,可以继承UITextView并重写
contentInset
方法,如下所示:
@interface BCZeroEdgeTextView : UITextView
@end
@implementation BCZeroEdgeTextView
- (UIEdgeInsets) contentInset
{
return UIEdgeInsetsZero;
}
@end
但这并不能阻止底部插图自身重新设置-只是更改了它自己重新设置的数字。如何使UITextView保持设置的contentInset值?
解决方法
为了使其保持设置的值,您可以使用子类路线,但返回自己的属性的值而不是常量,如下所示:
@interface BCCustomEdgeTextView : UITextView
@property (nonatomic,assign) UIEdgeInsets myContentInset;
@end
@implementation BCCustomEdgeTextView
@synthesize myContentInset;
- (UIEdgeInsets) contentInset {
return self.myContentInset;
}
@end
但请注意,UITextView将其底部的contentInset重置为32的原因是,更标准的插入将切断自动补全弹出窗口等。
,这是我的解决方案,但要长一些:
- (void)setCustomInsets:(UIEdgeInsets)theInset
{
customInsets = theInset;
self.contentInset = [super contentInset];
self.scrollIndicatorInsets = [super scrollIndicatorInsets];
}
- (void)setContentInset:(UIEdgeInsets)theInset
{
[super setContentInset:UIEdgeInsetsMake(
theInset.top + self.customInsets.top,theInset.left + self.customInsets.left,theInset.bottom + self.customInsets.bottom,theInset.right + self.customInsets.right)];
}
- (void)setScrollIndicatorInsets:(UIEdgeInsets)theInset
{
[super setScrollIndicatorInsets:UIEdgeInsetsMake(
theInset.top + self.customInsets.top,theInset.right + self.customInsets.right)];
}
子类UITextView
并添加属性customInsets
,每当需要设置contentInset
和scrollIndicatorInsets
时,都应设置customInsets
。