【问题标题】:How to set height of UITextView according to its content in objective c如何根据目标c中的内容设置UITextView的高度
【发布时间】:2011-11-16 02:49:37
【问题描述】:

我有一个UITextView,想根据内容的变化设置它的高度。

如何获取内容的高度。

请指导我。

提前致谢。

【问题讨论】:

  • 你有什么样的内容?
  • 我有英语和日语两种语言的字符串

标签: iphone objective-c text height uitextview


【解决方案1】:

如果你想为某些文本计算UITextView 的高度,那么你可以使用这样的方法:

CGSize textViewSize = [text sizeWithFont:[UIFont fontWithName:@"Marker Felt" size:20] 
                       constrainedToSize:CGSizeMake(WIDHT_OF_VIEW, FLT_MAX) 
                       lineBreakMode:UILineBreakModeTailTruncation];

fontWithName 中定义您在UITextView 中使用的字体,在size 参数中-UITextView 中的文本大小。替换您的UITextViewWIDHT_OF_VIEW width 宽度。

textViewSize.height 将包含高度,UITextField 无需滚动即可显示文本

【讨论】:

  • 好吧,我照着做吧
  • 为什么这么复杂?它有效,但这似乎是一个如此复杂的解决方案,我几乎无法相信没有更简单的解决方案......但是即使搜索了几个小时我也没有找到它......在我知道的所有其他平台(Java,NET, html) 这要容易得多...
  • @jbandi 我不同意这个解决方案很复杂。但是如果您需要知道一行的大小,那么您可以使用[text sizeWithFont:font] 方法。还有什么比这更简单的?
  • @Nekto 好吧,这个问题的驱动目标是获得一个“自动增长的文本框”。使用此解决方案,您首先必须获取 UITextView 的宽度(为此,您通常必须找出设备的方向)。然后您必须计算 UITextView 内容的高度(为此您必须向 UITextView 询问当前字体等详细信息)。然后你必须将计算出的高度传播回 UITextView,自动布局并不那么容易......这对我来说太复杂了,并且破坏了所有类型的封装......但我是一个头脑简单的人:-)
  • @Nekto 顺便说一句:我很高兴你发布了这个解决方案,我投了赞成票。它帮助我解决了我的问题。但我觉得应该有iOS平台提供的更简单的解决方案来实现“自动增长的文本框”。
【解决方案2】:
-(void)viewDidAppear:(BOOL)动画 { [超级 viewDidAppear:动画]; CGRect 框架 = _textView.frame; frame.size.height = _textView.contentSize.height; _textView.frame = 框架; }

【讨论】:

  • 这在 viewWillAppear 中似乎不起作用。它在放入 viewDidAppear 时有效,但随后会导致“视觉闪烁”,这意味着调整大小在屏幕上可见。 _textView.contentSize.height 在 vi​​ewWillAppear 中调用时返回错误值...
  • 我在 viewDidLoad 中使用它但不起作用...您的评论证明非常有帮助。它在 viewDidAppear 中有效。
【解决方案3】:

您可以使用UIStringDrawing类别中的方法计算文本的大小:

CGSize textSize = [textView.text sizeWithFont:font 
                                 forWidth:textWidth 
                                 lineBreakMode: UILineBreakModeWordWrap];

【讨论】:

    【解决方案4】:
    CGSize countentSize = textView.contentSize;
    int numberOfLinesNeeded = countentSize.height / textView.font.lineHeight;
    int numberOfLinesInTextView = textView.frame.size.height / textView.font.lineHeight;
    CGRect textViewFrame= textView.frame;
    textViewFrame.size.height = numberOfLinesNeeded * textView.font.lineHeight;
    [textView setFrame:textViewFrame];
    

    【讨论】:

      【解决方案5】:

      UITextViewUIScrollViewUILabel 是子视图。 UIScrollView 已经估计高度并在内容中显示文本输入。

      所以我们只需将ContentSize.Height 设置为就可以了。

      如果ContentInset == UIEdgeInset (a,b,c,d),则必须添加UIEdgeInset的维度

      查看更多:how to estimate height of UITextView

      【讨论】:

        猜你喜欢
        • 2016-03-13
        • 1970-01-01
        • 2019-03-04
        • 2016-11-26
        • 2012-10-06
        • 2018-12-01
        • 1970-01-01
        • 2014-10-19
        • 2019-03-11
        相关资源
        最近更新 更多