我有一个标签,它从数据库中动态地获取一些数据。这些数据是字符串,有时可以是3-4-5行等。所以这个标签是在一个UIView内。
--UIView --Label
如何使UIView动态地取标签的一定高度??
UIView
3qpi33ja1#
你可以用故事板这个图片来做
将标示高度关系设定为大于或相等并将视图高度关系设定为大于或相等它像魔术一样工作
t5fffqht2#
下面是你的问题的工作解决方案。我用了autoLayout。在testView中,你没有设置heightAnchor
autoLayout
testView
heightAnchor
let testView: UIView = { let view = UIView() view.translatesAutoresizingMaskIntoConstraints = false view.backgroundColor = UIColor.redColor() return view }() let testLabel: UILabel = { let label = UILabel() label.numberOfLines = 0 label.translatesAutoresizingMaskIntoConstraints = false label.text = "jashfklhaslkfhaslkjdhflksadhflkasdhlkasdhflkadshkfdsjh" return label }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(testView) testView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor).active = true testView.centerYAnchor.constraintEqualToAnchor(view.centerYAnchor).active = true testView.widthAnchor.constraintEqualToConstant(100).active = true testView.addSubview(testLabel) testLabel.topAnchor.constraintEqualToAnchor(testView.topAnchor, constant: 10).active = true testLabel.leftAnchor.constraintEqualToAnchor(testView.leftAnchor, constant: 10).active = true testLabel.bottomAnchor.constraintEqualToAnchor(testView.bottomAnchor, constant: -10).active = true testLabel.rightAnchor.constraintEqualToAnchor(testView.rightAnchor, constant: -10).active = true }
7jmck4yq3#
我知道这是迟来的答案,但它可能会帮助别人。要为UIView设置动态高度,请按照情节提要中的简单步骤操作1.在UIViewController中添加一个UIView,并设置您喜欢的背景颜色
1.现在设置以下约束前导、顶部、尾部和高度(截至目前)。我们可以调整高度约束以进一步实现动态高度。
1.更新高度约束,如下所示:
1.现在,故事板可能会向您显示不等式约束歧义。但我们现在要解决这个问题。只需在UIView中添加一个标签,如所示1.现在设置标签前导、尾随、顶部和底部的约束1.好哇,现在UIView的高度将根据标签的高度增加。只需对标签进行以下更改这个技巧可以和这个UIView中的其他视图一起使用。问题是你必须为这个UIView中的视图指定底部约束。
osh3o9ms4#
首先使用此函数计算包含文本的标注的大小
func calculateSizeOfLabel(text:String,labelWidth:CGFloat,labelFont:UIFont)->CGSize{ let constrainedSize = CGSizeMake(labelWidth , 9999) var attributesDictionary:[String:AnyObject] = [:] attributesDictionary = [NSFontAttributeName:labelFont] as [String:AnyObject] let string:NSMutableAttributedString = NSMutableAttributedString(string:text, attributes:attributesDictionary) var boundingRect = string.boundingRectWithSize(constrainedSize, options:.UsesLineFragmentOrigin, context:nil) if (boundingRect.size.width > labelWidth) { boundingRect = CGRectMake(0,0, labelWidth, boundingRect.size.height); } return boundingRect.size }
然后将返回大小的高度应用于UIView,如下所示
let labelText = description.text let labelWidth = description.bounds.width let labelFont = description.font let calculatedHeight = calculateSizeOfLabel(labelText,labelWidth:labelWidth,labelFont:labelFont).height DescView.frame = CGRectMake(DescView.frame.origin.x, DescView.frame.origin.y, DescView.bounds.width,calculatedHeight)
yws3nbqq5#
下面的代码将解决您的问题://调整视图高度
[yourView setFrame:CGRectMake(yourView.frame.origin.x, yourView.frame.origin.y, yourView.frame.size.width, yourLable.frame.size.height + yourLable.frame.origin.y + extraspace)];
ruarlubt6#
- (IBAction)action:(id)sender { self.label.text = @"UIImage *imageOne = [UIImage imageNamed:@RosePot.jpUIImageJPEGRepresentationg"; NSLog(@"%f",self.label.bounds.size.height); float height = [self getHeightForText:@"UIImage *imageOne = [UIImage imageNamed:@RosePot.jpUIImageJPEGRepresentationg" withFont:[UIFont fontWithName:@"HelveticaNeue" size:15] andWidth:self.label.bounds.size.width]; NSLog(@"%f",height); self.constraint.constant = height + self.viewOne.bounds.size.height;
}
-(float) getHeightForText:(NSString*) text withFont:(UIFont*) font andWidth:(float) width{ CGSize constraint = CGSizeMake(width , 20000.0f); CGSize title_size; float totalHeight; SEL selector = @selector(boundingRectWithSize:options:attributes:context:); if ([text respondsToSelector:selector]) { title_size = [text boundingRectWithSize:constraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName : font } context:nil].size; totalHeight = ceil(title_size.height); } else { title_size = [text sizeWithFont:font constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping]; totalHeight = title_size.height ; } CGFloat height = MAX(totalHeight, 40.0f); return height;
为视图给予行距、顶部、尾部和高度约束。和视图名称的高度插座作为约束[因为我使用了插座名称约束]
6条答案
按热度按时间3qpi33ja1#
你可以用故事板这个图片来做
将标示高度关系设定为大于或相等
并将视图高度关系设定为大于或相等
它像魔术一样工作
t5fffqht2#
下面是你的问题的工作解决方案。我用了
autoLayout
。在testView
中,你没有设置heightAnchor
7jmck4yq3#
我知道这是迟来的答案,但它可能会帮助别人。
要为UIView设置动态高度,请按照情节提要中的简单步骤操作
1.在UIViewController中添加一个UIView,并设置您喜欢的背景颜色
1.现在设置以下约束前导、顶部、尾部和高度(截至目前)。我们可以调整高度约束以进一步实现动态高度。
1.更新高度约束,如下所示:
1.现在,故事板可能会向您显示不等式约束歧义。但我们现在要解决这个问题。只需在UIView中添加一个标签,如
所示
1.现在设置标签前导、尾随、顶部和底部
的约束
1.好哇,现在UIView的高度将根据标签的高度增加。只需对标签
进行以下更改
这个技巧可以和这个UIView中的其他视图一起使用。问题是你必须为这个UIView中的视图指定底部约束。
osh3o9ms4#
首先使用此函数计算包含文本的标注的大小
然后将返回大小的高度应用于UIView,如下所示
yws3nbqq5#
下面的代码将解决您的问题:
//调整视图高度
ruarlubt6#
}
}
为视图给予行距、顶部、尾部和高度约束。
和视图名称的高度插座作为约束[因为我使用了插座名称约束]