如何获得UITextView的高度应该给出文本的宽度和长度?

时间:2016-01-06 11:04:04

标签: ios objective-c uikit

我正在添加一个包含UITextView的UIView,它被约束到视图的顶部,左侧和底部。

UIView的宽度应该是屏幕尺寸的宽度,而宽度又是UITextView的宽度。

当我去创建这个UIView时,我可以将它的CGSize设置为屏幕尺寸的宽度,但我不确定如何计算高度。

我怎样才能弄清楚我必须设置这个UIView的高度,以便UITextView可以正常显示?有没有办法可以算出UITextView给定一定宽度的行数?

5 个答案:

答案 0 :(得分:1)

使用此代码

    CGSize constraintSize = CGSizeMake(textView.width - 2*textView.textContainer.lineFragmentPadding, CGFLOAT_MAX);
    CGFloat messageTextViewHeight = [text boundingRectWithSize:constraintSize
                                                       options:NSStringDrawingUsesLineFragmentOrigin
                                                    attributes:@{NSFontAttributeName: textView.font}
                                                       context:nil].size.height;

答案 1 :(得分:1)

您可以使用以下代码获取动态Rect:

 NSString *myDynamicString = @"Hello World!";
 CGSize textRect = [myDynamicString boundingRectWithSize:CGSizeMake(MAX_WIDTH, MAX_HEIGHT)
                                            options:NSStringDrawingUsesLineFragmentOrigin
                                         attributes:@{NSFontAttributeName:[UIFont fontWithName:@"YouFontName" size:15]}
                                            context:nil];

注意

  

MAX_WIDTH宽度允许扩展矩形。如果你给200那么矩形将开始直到200然后打破并且反对Versa MAX_HEIGHT

答案 2 :(得分:1)

- (CGSize)getSizeForText:(NSString *)text maxWidth:(CGFloat)width font:(NSString *)fontName fontSize:(float)fontSize {

class GameScene:SKScene {

    var wait:NSTimeInterval = 0

    override func didMoveToView(view: SKView) {

        NSLog("Start") //Using NSLog just to print the current time
        recursive()

    }

    func recursive(){

        let recursive = SKAction.sequence([

            SKAction.waitForDuration(++wait),
            //Do your stuff here, eg. run scale, move...
            SKAction.runBlock({[unowned self] in NSLog("Block executed"); self.recursive()})
            ])

        runAction(recursive, withKey: "aKey")
    }
}

}

答案 3 :(得分:0)

首先,如果您使用自动布局,这将是开箱即用的,您不必做任何事情只需正确设置自动布局的约束。

NSSString API不是很方便(正如你在其他答案中看到的那样)很容易错过一些东西。我建议使用-(CGSize)sizeThatFits:中的UIView

UIView *textView = self.textView;
CGSize fitSize = { CGRectGetWidth(textView.frame), CGFLOAT_MAX };
CGSize fitSize = [textView sizeThatFits: fitSize];
NSLog(@"Your desired height: %f", fitSize.height);

它更可靠,它应该考虑UITextView内的所有文本属性。我使用此UILabel没有测试UITextView,但它应该可以很好地工作。

答案 4 :(得分:0)

如果你想看到文本视图中的所有文本,周围的周围视图适应包含它,最简单的方法是使用UILabel。然后你可以使用具有优先级的约束。将UILabel行数设置为0,以便自动换行。然后将contentCompressionResistancePriority设置为1000(垂直轴)。那你就不用担心尺寸了。让autolayout为您完成工作。