2014-08-29 2 views
2

У меня есть UIScrollView с несколькими дочерними UITextView, расположенными вертикально. Я хочу, чтобы UIScrollView изменялся в соответствии с содержанием. Так что мои TextViews яКак изменить размер UIScrollView в соответствии с содержанием детей UITextViews

- (void)textViewDidChange:(UITextView *)textView 
{ 
    CGFloat fixedWidth = textView.frame.size.width; 
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
    CGRect newFrame = textView.frame; 
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
    textView.frame = newFrame; 
    [textView setNeedsLayout]; 
} 

И для Scrollview я

-(void)resizeScrollViewToFitContent 
{ 
    CGRect contentRect = CGRectZero; 
    for (UIView *view in self.scrollView.subviews) { 
     contentRect = CGRectUnion(contentRect, view.frame); 
    } 
    self.scrollView.contentSize = contentRect.size; 
} 

Я называю [self resizeScrollViewToFitContent] внутри viewDidAppear. Любые идеи, почему эта настройка не работает?

+0

Вы сможете загрузить образец проекта на Github? – Ricky

+0

№. Мне не разрешено загружать проект в публичное репо. –

+0

Просто создайте новый образец проекта, 1 контроллер представления со списком прокрутки, а также текстовое изображение + код, чтобы изменить размер текста/прокрутки, которые вы сделали. – Ricky

ответ

1

Я не уверен, как расположено ваше текстовое изображение внутри scrollView. Я предполагаю, что они расположены вертикально справа друг от друга. Я создал образец проекта с Scrollview и 3 TextViews и он хорошо работает со следующим кодом: -

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    CGFloat height = self.textView1.frame.size.height +self.textView2.frame.size.height +self.textView3.frame.size.height ; 
    CGSize size = CGSizeMake(self.scrollView.frame.size.width, height); 
    self.scrollView.contentSize = size; 
} 

Из моего собственного проекта, содержание Высота Scrollview является сочетание высоты для всех 3 TextViews , В вашем проекте это может быть иначе.

+0

Спасибо. Я уже пробовал это. Два подзаголовка составляют до 350. И даже после присвоения scrollView высота прокрутки составляет 520 (высота кадра). Но проблема, по-видимому, связана с размером кадра и размером содержимого. Размер содержимого правильный, когда я проверяю его. Но когда я проверяю размер высоты фрейма, он терпит неудачу. И выполнение '[self.scrollView sizeToFit]' не помогает. –

+0

Что значит «не удается»? По моему опыту, размер рамки для scrollView обычно фиксируется на раскадровке. Я только настраиваю размер содержимого прокрутки, когда любые подвидности должны изменять размер. Вы можете проверить это на своем раскадровке. Лучше всего, если вы сможете загрузить образец проекта где-нибудь, чтобы я мог получить полную картину. – Ricky

0

Вы не должны делать объединение с форматом contentFrame и view.frame. Попробуйте следующее:

-(void)resizeScrollViewToFitContent 
{ 
    UIScrollView* scrollView; 
    CGSize contentSize = CGSizeZero; 
    for (UIView* subview in scrollView.subviews) 
    { 
     CGFloat subviewRight = CGRectGetMaxX(subview.frame); 
     if (subviewRight > contentSize.width) 
     { 
      contentSize.width = subviewRight; 
     } 

     CGFloat subviewBottom = CGRectGetMaxY(subview.frame); 
     if (subviewBottom > contentSize.height) 
     { 
      contentSize.height = subviewBottom; 
     } 
    } 
    scrollView.contentSize = contentSize; 
} 

Одна маленькая вещь, стоит отметить: показатели прокрутки UIScrollView являются подвиды любого UIScrollView. Это может сбрасывать точность кода выше, но я обнаружил, что он всегда работает, за исключением некоторых особых случаев.

0

Если вы знаете, сколько подвыборок находится в вашем scrollview для каждой строки, вам нужно немного вычислить математику, чтобы найти правильную высоту.

Например, у вас может быть uiview с uiimageview и uilabel, поэтому вы подсчитаете количество просмотров в 3 раза, что и должно быть.

попробовать

// CSV = contentscrollview

NSLog(@"%d", [[csv subviews] count]/3); 
Смежные вопросы