У меня есть 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