在 iOS 上将图像和文本内联居中

Posted

技术标签:

【中文标题】在 iOS 上将图像和文本内联居中【英文标题】:Center both image and text inline on iOS 【发布时间】:2015-07-02 11:14:08 【问题描述】:

我有一个全角标签,带有动态文本,因此它可以是两个字符或十个字符。我需要在左侧显示一个内联图像,始终距离第一个字母 10 像素。请看下面的例子。

目前,我只是放置一个全角标签,在运行时,我使用boundingRectWithSize: 方法测量文本宽度,并以编程方式调整我的图像约束。

你有什么好的想法来构建这种界面而不需要手动测量文本宽度吗?

【问题讨论】:

看看+ (NSAttributedString * nonnull)attributedStringWithAttachment:(NSTextAttachment * nonnull)attachment objective-c 还是 swift? 为什么不使用自动布局? @Lorenzo 你能更具体一点吗?有什么实现想法吗? 【参考方案1】:

目标 - C

您可以添加图片作为文本附件。

NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
UIImage *imageTest=[UIImage imageNamed:@"arrow.png"];
attachment.image = imageTest;
NSMutableAttributedString *myString= [[NSMutableAttributedString alloc] initWithString:@"My label text "];
NSMutableAttributedString *myStringWithArrow = [[NSMutableAttributedString alloc]initWithAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
[myStringWithArrow appendAttributedString:myString];
yourLabel.attributedText = myStringWithArrow;

斯威夫特

var attachment = NSTextAttachment()
var imageTest = UIImage(named:"arrow.png")
attachment.image = imageTest
var myString = NSMutableAttributedString(string: "My label text ")
var myStringWithArrow = NSMutableAttributedString(attributedString: NSAttributedString(attachment: attachment))
myStringWithArrow.appendAttributedString(myString)
lblAttributed.attributedText = myStringWithArrow

输出:

【讨论】:

哇,太完美了,这就是我要找的!实际上我的应用程序是用 Swift 编写的,但我不在乎,我明白了这个概念。非常感谢! @hagile 谢谢!我会尽快尝试。 @AshishKakkad 我刚刚添加了 Swift 版本,别担心。谢谢! @hagile 我提交了,应该在同行评审中:) @sweepy_ 我已经用 swift 代码更新了答案。我认为同行评审会因为我的更新而取消。【参考方案2】:

@ashish-kakkad 的回答很完美,但除非您需要像素完美的图像,否则您可以使用 Unicode 符号:

[self.button1 setTitle:@"\u27A4 Button" forState:UIControlStateNormal];

大部分带有代码的 Unicode 符号都可以在这里找到http://unicode-table.com/

【讨论】:

谢谢,实际上我确实需要包含一个 IImage 实例,但这是一个好点。 哇,没想到这个!!太棒了。

以上是关于在 iOS 上将图像和文本内联居中的主要内容,如果未能解决你的问题,请参考以下文章

居中内联块保持文本左对齐

UIButton:容器中的文本居中,图像左侧

在水平堆栈视图(自动布局)中将文本与图像垂直居中 - iOS

在拆分视图中的 UIToolbar 上将文本注释完全居中

反应内联样式 - 用居中文本替换 tbody

内联块中的垂直居中文本