如何调整滚动视图内容的大小并根据其文本大小将文本视图放入其中? [复制]

Posted

技术标签:

【中文标题】如何调整滚动视图内容的大小并根据其文本大小将文本视图放入其中? [复制]【英文标题】:How to resize scrollView content and put textViews in that according to their text size? [duplicate] 【发布时间】:2011-02-21 14:02:56 【问题描述】:

可能重复:How can i fix my scrollView dynamically when i have more than one textViews in it?

我在界面生成器中创建了一个滚动视图,并在其中放置了 3 个文本视图和 2 个按钮。有时 textViews 有更多的文本,有时更少。我设法给他们灵活的框架尺寸。但如果顶部 textView 有更多文本,那么它的一些文本会超过第二个 textView。我试过这段代码。我认为它应该工作,但它不能正常工作。

    storyTitle.text = sTitle;
storyTitle.font = [UIFont boldSystemFontOfSize:18];

date.text = sDate;  
    date.font = [UIFont systemFontOfSize:16];

summary.text = sSummary;
summary.font = [UIFont systemFontOfSize:16];

CGRect titleFrame = storyTitle.frame;
titleFrame.size.height = storyTitle.contentSize.height;
storyTitle.frame = titleFrame;

CGRect dateFrame = date.frame;
dateFrame.size.height = label.contentSize.height;
date.frame = dateFrame;

CGRect summaryFrame = summary.frame;
summaryFrame.size.height = summary.contentSize.height;
summary.frame = summaryFrame;

CGRect topTextViewFrame = storyTitle.frame;
CGRect middleTextViewFrame = date.frame;
NSLog(@"size: %d",topTextViewFrame.origin.y);
middleTextViewFrame.origin.y = topTextViewFrame.origin.y + topTextViewFrame.size.height;
CGRect bottomTextViewFrame = summary.frame;
bottomTextViewFrame.origin.y = middleTextViewFrame.origin.y + middleTextViewFrame.size.height;

   // then adjust other controls based on these frames, for example:
CGRect myButtonFrame = detailButton.frame;
myButtonFrame.origin.y = bottomTextViewFrame.origin.y + bottomTextViewFrame.size.height;

CGRect myButtonFrame2 = fbButton.frame;
myButtonFrame2.origin.y = myButtonFrame.origin.y + myButtonFrame.size.height;

// finally adjust the contentSize of the scrollview assuming the button is the bottom element
CGSize csize = scrollView.contentSize;
csize.height = myButtonFrame2.origin.y + myButtonFrame2.size.height;
scrollView.contentSize = csize;

谁能告诉我这有什么问题?以及我应该如何纠正它才能正常工作。提前谢谢

【问题讨论】:

请编辑原始问题以添加新的详细信息,而不是针对完全相同的问题打开新问题。 【参考方案1】:

嗨,如果您的文本不能由用户编辑,请尝试使用 UILabel 而不是 UITextView。如果您设置 UILabel = 0 的 numberOfLines 属性,那么它可以多到一行,然后您可以计算标签所需的高度方法

CGSize size = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap ];

你可以根据你在这里得到的高度来设置标签的框架

 label.frame = CGRectMake(label.frame.origin.x,label.frame.origin.y,label.frame.size.width,size.height);

如果你有这么多个标签,你可以做以下

CGSize size = [label1.text sizeWithFont:label1.font constrainedToSize:CGSizeMake(label1.frame.size.width, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap ];
label1.frame =   CGRectMake(label1.frame.origin.x,label1.frame.origin.y,label1.frame.size.width,size.height);

size = [label2.text sizeWithFont:label2.font constrainedToSize:CGSizeMake(label2.frame.size.width, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap ];
label2.frame =   CGRectMake(label2.frame.origin.x,label1.frame.origin.y+label1.frame.size.height+10,label2.frame.size.width,size.height);

size = [label3.text sizeWithFont:label3.font constrainedToSize:CGSizeMake(label3.frame.size.width, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap ];
label3.frame =   CGRectMake(label3.frame.origin.x,label2.frame.origin.y+label2.frame.size.height+10,label3.frame.size.width,size.height);

最后,您可以根据最后一个标签调整滚动视图的内容高度。

【讨论】:

以上是关于如何调整滚动视图内容的大小并根据其文本大小将文本视图放入其中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据内容调整 UITextView 的大小?

根据 JSON 文件中的内容文本调整带有 UILabel 的自定义单元格的大小

如何根据文本视图内容大小设置滚动视图中的启用或禁用滚动?

Xcode UIScrollView 布局 - 设置水平内容大小并水平调整子视图大小

如何根据动态内容调整 textview 和 scrollview 内容大小

如何调整标签大小以适应任何屏幕尺寸