6

在 Objective-C 中,我有一个 UILabel,上面写着“正在加载”。每 0.5 秒,该字符串将获得另一个 '.' 直到有 3 个点,然后重新开始。我面临的问题是我的字符串居中,当每个点出现时,字符串都会跳跃。字符串跳转的原因是因为 UILabel 不断修剪正确的空白。

这是当前正在发生的事情的示例。

+------------+
|  Loading   |
+------------+
|  Loading.  |
+------------+
| Loading..  |
+------------+
| Loading... |
+------------+

这就是我想要发生的事情。

+------------+
| Loading    |
+------------+
| Loading.   |
+------------+
| Loading..  |
+------------+
| Loading... |
+------------+

告诉 UILabel 具有更大的宽度并左对齐不是一种选择。这需要对文本进行。

我找到了这个链接,但我仍然无法弄清楚。

我目前拥有的是这个。

[NSString stringWithFormat:@"%-3.3s", [@"" UTF8String]];
[NSString stringWithFormat:@"%-3.3s", [@"." UTF8String]];
[NSString stringWithFormat:@"%-3.3s", [@".." UTF8String]];
@"...";
4

3 回答 3

4

文本在标签上的工作方式是 - 它由标准格式信息格式化 - 如修剪等。如果您不希望 ios 控制它。您可以以编程方式设置属性文本。这不会通过格式化。这是苹果的文档

attributesText 标签显示的样式文本。

@property(nonatomic,copy) NSAttributedString *attributedText 讨论 该属性默认为 nil。为该属性分配一个新值也会用相同的字符串数据替换 text 属性的值,尽管没有任何格式信息。此外,分配一个新的值会更新字体、textColor 和其他与样式相关的属性中的值,以便它们反映从属性字符串中位置 0 开始的样式信息。

本质上将 uilabel 的属性文本设置为“正在加载”

于 2013-10-02T21:13:34.250 回答
1

看看这个

解决方案是添加尾随可见字符并将它们设置为透明。

于 2014-03-20T01:46:07.217 回答
1

设置label.textAlignment = NSTextAlignmentNatural。从 ios 9 开始,这是默认设置,在此之前它曾经是 NSTextAlignmentLeft。

现在,由于您的文本必须居中,因此将其包装在 UIView 中,标签的所有边距都与包装器视图的边距锚定。然后将包装纸而不是标签居中。

这是代码:

UIView* wrapper = [[UIView alloc] init];
wrapper.translatesAutoresizingMaskIntoConstraints = NO;
//This sets the wrapper at the center of where you were adding the label previously
[wrapper.centerXAnchor constraintEqualToAnchor: superview.centerXAnchor].active = YES;

label.translatesAutoresizingMaskIntoConstraints = NO;
[label.leadingAnchor constraintEqualToAnchor:wrapper.leadingAnchor].active = YES;
[label.trailingAnchor constraintEqualToAnchor:wrapper.trailingAnchor].active = YES;
[label.topAnchor constraintEqualToAnchor:wrapper.topAnchor].active = YES;
[label.bottomAnchor constraintEqualToAnchor:wrapper.bottomAnchor].active = YES;

label.textAlignment = NSTextAlignmentNatural
...
于 2017-03-29T13:27:53.783 回答