我有一个全屏UITextView,只要键盘出现就会变小,这样键盘就不会覆盖任何文本。作为其中的一部分,我还更改了textView的底部contentInset,因此当键盘存在时文本下方的空间较小,而没有键盘时则较大。
问题是,每当用户点击底部附近的textView开始编辑时,底部的contentInset会自动将自身重置为32.我从this answer知道可以继承UITextView并覆盖{{ 1}}方法,像这样:
contentInset
但这并没有阻止底部插入重置自己 - 它只是改变它重置自己的数字。如何让我的UITextView保持我设置的contentInset值?
答案 0 :(得分:1)
为了保持你设置的值,你可以去子类路由但返回你自己的属性的值而不是常量,如下所示:
@interface BCCustomEdgeTextView : UITextView
@property (nonatomic, assign) UIEdgeInsets myContentInset;
@end
@implementation BCCustomEdgeTextView
@synthesize myContentInset;
- (UIEdgeInsets) contentInset {
return self.myContentInset;
}
@end
但请注意,UITextView将其底部contentInset重置为32的原因是更标准的插入将切断自动完成弹出窗口等。
答案 1 :(得分:0)
这是我的解决方案,但有点长:
- (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.left + self.customInsets.left,
theInset.bottom + self.customInsets.bottom,
theInset.right + self.customInsets.right)];
}
子类UITextView
并添加属性customInsets
,无论何时需要设置contentInset
和scrollIndicatorInsets
,都要设置customInsets
。