UITextView не перерисовывается после изменения размера - PullRequest
1 голос
/ 08 февраля 2011

У меня есть UITextView (iOS4.2.1 - iPad), который я пытаюсь превратить в своего рода «выпадающее окно», чтобы пользователи могли изменять размеры по своему усмотрению. Я использую распознаватель жестов панорамирования для отслеживания пальца пользователя, а затем изменяю размер фрейма UITextView в соответствии с тем, насколько далеко палец сместился. Все в порядке - за исключением того, что текст в UITextView «обрезается», как только размер кадра превышает определенный размер. Если я взаимодействую с текстом (щелкаю / прокручиваю его пальцем), все перерисовывается правильно. Я могу воспроизвести это в очень маленькой программе - см. Ниже. Кто-нибудь еще видел это? Я попробовал все обычные «хаки» (то есть принудительно устанавливая положение прокрутки - изменяя текст и т. Д. - все «работает», но имеют недостатки)

Заранее спасибо за любые указатели ...

Тестовая программа для его воспроизведения выглядит следующим образом (просто создайте приложение iPad на основе стандартного представления, затем вставьте следующее в основной ViewController.) Запустите программу, затем проведите пальцем по странице - только первые 8 или около того строк текст будет отображаться.

@implementation TextViewTestViewController

- (void)createAndLoadTextView
{
    theTextView = [[UITextView alloc] initWithFrame:CGRectZero]; 
    theTextView.font = [UIFont systemFontOfSize:27];

    theTextView.backgroundColor = [UIColor redColor];
    theTextView.opaque = YES;

    theTextView.text = @"1 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "2 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "3 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "4 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "5 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "6 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "7 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "8 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "9 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "10 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "11 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "12 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "13 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "14 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "15 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"
                        "16 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n";

    [self.view addSubview:theTextView]; 
}

- (void)viewDidLoad 
{
    [super viewDidLoad];

    [self createAndLoadTextView];

    UIPanGestureRecognizer* panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPanGesture:)] autorelease];    
    [self.view addGestureRecognizer:panGesture];

    UITapGestureRecognizer* tapGesture = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapGesture:)] autorelease];    
    [self.view addGestureRecognizer:tapGesture];
}

- (void)onPanGesture:(UIPanGestureRecognizer*)gesture
{
    if (gesture.state == UIGestureRecognizerStateBegan ||gesture.state == UIGestureRecognizerStateChanged)
    {
        CGFloat yDelta = [gesture translationInView:self.view].y;

        [gesture setTranslation:CGPointZero inView:self.view];

        theTextView.frame = CGRectMake(0, 0, self.view.bounds.size.width, theTextView.bounds.size.height + yDelta);
    }   
}   

- (void)onTapGesture:(UIPanGestureRecognizer*)gesture
{
    //'reset'

    [theTextView removeFromSuperview];
    [theTextView release];
    theTextView = nil;

    [self createAndLoadTextView];
}

@end

1 Ответ

1 голос
/ 08 февраля 2011

Возможно, вы захотите попробовать вызвать setNeedsDisplay для текстового представления после изменения геометрии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...