我想我有这个相对简单的问题。想象一下,我有一个UILabel
包含一些文字的内容。然后,我希望在文本的左侧或右侧也显示(添加)图像。
像这样的东西:
http://www.zazzle.com/blue_arrow_button_left_business_card_templates-240863912615266256
有没有办法做到这一点,使用,说UILabel
方法?我没有找到这样的。
我想我有这个相对简单的问题。想象一下,我有一个UILabel
包含一些文字的内容。然后,我希望在文本的左侧或右侧也显示(添加)图像。
像这样的东西:
http://www.zazzle.com/blue_arrow_button_left_business_card_templates-240863912615266256
有没有办法做到这一点,使用,说UILabel
方法?我没有找到这样的。
以防万一其他人将来查找此内容。我会继承 UIlabel 类并添加一个图像属性。
然后您可以覆盖 text 和 image 属性的设置器。
- (void)setImage:(UIImage *)image {
_image = image;
[self repositionTextAndImage];
}
- (void)setText:(NSString *)text {
[super setText:text];
[self repositionTextAndImage];
}
在 repositionTextAndImage 中,您可以进行定位计算。我粘贴的代码,只是在左边插入一个图像。
- (void)repositionTextAndImage {
if (!self.imageView) {
self.imageView = [[UIImageView alloc] init];
[self addSubview:self.imageView];
}
self.imageView.image = self.image;
CGFloat y = (self.frame.size.height - self.image.size.height) / 2;
self.imageView.frame = CGRectMake(0, y, self.image.size.width, self.image.size.height);
}
最后,覆盖 drawTextInRect: 并确保在标签左侧留出空间,使其不会与图像重叠。
- (void)drawTextInRect:(CGRect)rect {
// Leave some space to draw the image.
UIEdgeInsets insets = {0, self.image.size.width + kImageTextSpacer, 0, 0};
[super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}
创建一个包含 UIImageView 和 UILabel 子视图的自定义 UIView。您必须在其中执行一些几何逻辑来调整标签的大小以适合左侧或右侧的图像,但它不应该太多。
使用您的图像创建一个 UIImageView 并在顶部添加 UILabel
[imageview addSubView:label];
根据您需要的位置设置标签的框架。
我刚刚在我的 Live Project 中实现了类似的东西,希望它会有所帮助。
-(void)setImageIcon:(UIImage*)image WithText:(NSString*)strText{
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = image;
float offsetY = -4.5; //This can be dynamic with respect to size of image and UILabel
attachment.bounds = CGRectIntegral( CGRectMake(0, offsetY, attachment.image.size.width, attachment.image.size.height));
NSMutableAttributedString *attachmentString = [[NSMutableAttributedString alloc] initWithAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
NSMutableAttributedString *myString= [[NSMutableAttributedString alloc] initWithString:strText];
[attachmentString appendAttributedString:myString];
_lblMail.attributedText = attachmentString;
}