动态 UIScrollView 中的动态 UITextView - iOS

Posted

技术标签:

【中文标题】动态 UIScrollView 中的动态 UITextView - iOS【英文标题】:Dynamic UITextView in a dynamic UIScrollView - iOS 【发布时间】:2013-06-09 14:41:23 【问题描述】:

我正面临一个需要很长时间才能解决的问题。 我构建了一个视图,其中包含一个 ScrollView。在 ScrollView 中,有一个包含图像的视图和一个 UITextView。文本视图应处于动态高度,禁用滚动。 textview 获取所有文本,但将其切断,并仅显示适合高度的文本。另外,ScrollView 没有变化。

- (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;

我做了很多改变,我不知道里面发生了什么!...

帮助会很好:)

更新-

- (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;

【问题讨论】:

另见***.com/questions/27652334/… 【参考方案1】:

试试

- (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

【讨论】:

我更新了我的问题...部分代码确实帮助了我,但滚动视图的高度仍然不合适,它保持不变。当我使用您的代码时,没有更改,文本视图从视图中间开始......有什么想法吗? @AndroAid 如果您以编程方式调整视图大小,请不要设置自动布局/自动调整掩码。如果您正在设置,请在 containerView 中设置您可以参考提供的源代码。 我想不通...我有一个 UIView,它包含一个 UIScrollView。 scrollView 包含 contentView,其中包含 textview。在所有视图中都检查了 autoResize 子视图。但仍然是 NADA。我的项目快完成了,这是最后一个主要问题:/ 添加了问题视图的屏幕截图 :) @AndroAid 我能想到的一个原因是使用AutoLayout。我提供的源代码没有使用自动布局。【参考方案2】:

有同样的问题,尝试了很多天找到解决方案,最后我得到了它的工作。 我在滚动视图中有一个文本视图。

    从情节提要中禁用自动布局 我用 addsubview 将 textview 添加到 scrollview 中 最后将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)];

希望对你有帮助!

【讨论】:

【参考方案3】:

你需要先设置self.contentView高度使用这个代码:

- (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;

【讨论】:

感谢您的回答。当我写信给 Anupdas 时,代码看起来是正确的,但是 textview 中的文本从视图的中间开始。有很多滚动,直到它到达文本,然后文本在中间切断。

以上是关于动态 UIScrollView 中的动态 UITextView - iOS的主要内容,如果未能解决你的问题,请参考以下文章

具有自动布局的 UIScrollView 中的动态大小的 UITableView

UIScrollView 动态内容中的自动布局,底部有 UIButton

markdown UIScrollView中的动态UILabel高度与Autolayout

如何在 IO (Xamarin.IO) 中动态启用和滚动 UIScrollView?

UIScrollView 中宽度和高度相等的动态按钮

将动态高度设置为 UIScrollView Swift