2013-06-09 2 views
1

У меня проблема, которая заставляет меня слишком долго решать. Я построил представление, содержащее ScrollView. в ScrollView есть представление, содержащее изображение, и UITextView. текст должен быть динамически высок, при этом прокрутка отключена. textview получает весь текст, но отключает его и отображает только текст, соответствующий высоте. кроме того, ScrollView не изменяется.Динамический UITextView в динамическом UIScrollView - iOS

- (void)viewDidLoad 

.... 
//sets the text to the textview 
[self.contentArticle setText:[NSString stringWithString:xmlParser.articleContent]]; 
//configures the scrollView 
[self configureScrollView]; 

.... 

- (void)configureScrollView { 

[self.contentView addSubview:self.contentArticle]; 
[self.scrollView addSubview:self.contentView]; 

CGRect frame = self.contentView.frame; 
frame.size.height = self.contentArticle.contentSize.height; 
self.scrollView.frame = frame; 

[self.contentView sizeToFit]; 
[self.scrollView sizeToFit]; 

self.scrollView.contentSize = self.contentView.frame.size; 
self.contentArticle.editable=NO; 
self.contentArticle.scrollEnabled=NO; 

//enable zoomIn 
self.scrollView.delegate=self; 
self.scrollView.minimumZoomScale=1; 
self.scrollView.maximumZoomScale=7; 

Я сделал так много изменений, и я не уверен, что там происходит больше! ...

помощь будет ооочень приятно :)

update-

- (void)configureScrollView { 

[self.contentView addSubview:self.contentArticle]; 
[self.scrollView addSubview:self.contentView]; 

CGRect textViewFrame = self.contentArticle.frame; 
textViewFrame.size = [self.contentArticle contentSize]; 
self.contentArticle.frame = textViewFrame; 

[self.scrollView setContentSize:textViewFrame.size]; 
self.contentArticle.editable=NO; 
self.contentArticle.scrollEnabled=NO; 
} 

screen shot of the View

+0

См. Также http://stackoverflow.com/questions/27652334/uitextview-inside-uiscrollview-with-autolayout/30633898#30633898 – Suragch

ответ

3

Попробуйте

- (void)configureScrollView{ 

    self.contentView.autoresizingMask = UIViewAutoresizingNone; 
    self.contentArticle.autoresizingMask = UIViewAutoresizingNone; 

    CGRect textViewFrame = self.contentArticle.frame; 
    textViewFrame.size = [self.contentArticle contentSize]; 
    self.contentArticle.frame = textViewFrame; 

    CGRect contentViewFrame = self.contentView.frame; 
    contentViewFrame.size.height = textViewFrame.origin.y+textViewFrame.size.height; 
    self.contentView.frame = contentViewFrame; 

    [self.scrollView setContentSize:contentViewFrame.size]; 

    self.contentArticle.editable=NO; 
    self.contentArticle.scrollEnabled=NO; 

    //enable zoomIn 
    self.scrollView.delegate=self; 
    self.scrollView.minimumZoomScale=1; 
    self.scrollView.maximumZoomScale=7; 

} 

Source code

+1

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

+0

@AndroAid Если вы произвольно изменяете размеры своих представлений, не устанавливайте автоопределения/автосохранение масок. Если вы устанавливаете, установите внутри containerView. Вы можете обратиться к исходному коду. – Anupdas

+0

Я не могу понять это ... У меня есть UIView, который содержит UIScrollView. scrollView содержит contentView, который содержит текстовое представление. подпрограммы autoResize проверяются во всех представлениях. но все же НАДА. мой проект почти завершен, и это последний главный вопрос:/ – AndroAid

0

Вам необходимо установить self.contentView height first Use th это код:

- (void)configureScrollView { 

    [self.contentView addSubview:self.contentArticle]; 
    CGRect frame = self.contentArticle.frame; 
    frame.size.height = self.contentArticle.contentSize.height; 
    self.contentArticle.frame = frame; 

    [self.scrollView addSubview:self.contentView]; 
    frame = self.contentView.frame; 
    frame.size.height += self.contentArticle.frame.height; 
    self.contentView.frame = frame; 

    self.scrollView.contentSize = self.contentView.frame.size; 
    self.contentArticle.editable=NO; 
    self.contentArticle.scrollEnabled=NO; 

    //enable zoomIn 
    self.scrollView.delegate=self; 
    self.scrollView.minimumZoomScale=1; 
    self.scrollView.maximumZoomScale=7; 
} 
+0

спасибо за ответ. как я писал в Anupdas, код кажется правильным, но текст в текстовом виде начинается в середине представления. есть много прокрутки, пока не дойдет до текста, а затем текст срезается посередине. – AndroAid

0

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

  1. инвалидов autolayout от раскадровках
  2. ив добавил TextView к Scrollview с addsubview
  3. и, наконец, установить содержание Scrollview, на высоту TextView кадра.

Ниже мой код:

_textView.text = stripped; //(some string ,yours: contentArticle) 
[_textView sizeToFit]; 
CGRect frame = _textView.frame; 
frame.size.height = _textView.contentSize.height; 
_textView.scrollEnabled = NO; 
_textView.frame = frame; 

[self.scrollView addSubview:_textView]; 
[self.scrollView setContentSize:CGSizeMake(320,frame.size.height)]; 

Надеется, что это помогает!

Смежные вопросы