如何阻止UITextView底边插入重置为32?

时间:2011-05-25 15:50:25

标签: iphone cocoa-touch uiscrollview uitextview

我有一个全屏UITextView,只要键盘出现就会变小,这样键盘就不会覆盖任何文本。作为其中的一部分,我还更改了textView的底部contentInset,因此当键盘存在时文本下方的空间较小,而没有键盘时则较大。

问题是,每当用户点击底部附近的textView开始编辑时,底部的contentInset会自动将自身重置为32.我从this answer知道可以继承UITextView并覆盖{{ 1}}方法,像这样:

contentInset

但这并没有阻止底部插入重置自己 - 它只是改变它重置自己的数字。如何让我的UITextView保持我设置的contentInset值?

2 个答案:

答案 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,无论何时需要设置contentInsetscrollIndicatorInsets,都要设置customInsets