我正在添加一个包含UITextView的UIView,它被约束到视图的顶部,左侧和底部。
UIView的宽度应该是屏幕尺寸的宽度,而宽度又是UITextView的宽度。
当我去创建这个UIView时,我可以将它的CGSize设置为屏幕尺寸的宽度,但我不确定如何计算高度。
我怎样才能弄清楚我必须设置这个UIView的高度,以便UITextView可以正常显示?有没有办法可以算出UITextView给定一定宽度的行数?
答案 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然后打破并且反对VersaMAX_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为您完成工作。