我试图将UILabel水平居中。这就是最终看起来的样子(注意它没有中心)。
ReflectionView *aReflectionView = [[ReflectionView alloc]initWithFrame:CGRectMake(((self.view.bounds.size.width / 2) - 150), 40, 300, 90)];
UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(((self.view.bounds.size.width / 2) - 150), 0, 300, 90)];
aLabel.textAlignment = UITextAlignmentCenter;
aLabel.text = @"1 lbs";
self.weightLabel = aLabel;
[aReflectionView addSubview:self.weightLabel];
self.weightReflectionView = aReflectionView;
[self.view addSubview:self.weightReflectionView ];
[self.weightReflectionView updateReflection];
答案 0 :(得分:7)
textAlignment
属性会在UILabel
的框架内对齐文字,而不是在|
之外。我的ASCII技能有点生疏,但这就是我的意思。考虑下面的标签,其中[]
表示标签的左/右边缘。
|173 lbs | => left aligned | 173 lbs| => right aligned | 173 lbs | => center aligned (not exactly centered in terms of its superview)
现在考虑另一个视图中包含的相同标签,其中外部|
表示包含视图的边缘,内部textAlignment
表示包含标签的边缘。注意内部标签在其超视图中是不是完全居中,并且稍微向右推(左边2个空格,右边靠近1个空格)。
[ |173 lbs | ] => left aligned [ | 173 lbs| ] => right aligned [ | 173 lbs | ] => center aligned
如果您希望标签始终在超视图或屏幕中居中对齐,您可能需要确保标签的宽度与其容器匹配,然后将bounds
设置为居中。方法如下:
[|173 lbs |] => left aligned [| 173 lbs|] => right aligned [| 173 lbs |] => center aligned (perfectly aligned)
这是一种常见情况,您希望子视图与超视图的确切大小相匹配。您可以使用ReflectionView *aReflectionView = [[ReflectionView alloc] initWithFrame:..];
// Use the bounds of the superview to set the subview's frame.
UILabel *aLabel = [[UILabel alloc] initWithFrame:aReflectionView.bounds];
属性轻松完成此操作。
{{1}}
作为一个UI调试技巧,尝试更改有问题的视图(标签)的背景,以准确显示它正在采取的区域,这通常有助于解决许多此类问题。
答案 1 :(得分:2)
仅出于调试目的,请尝试设置backgroundColor
和aLabel
的{{1}}以查看它们的放置位置。
aReflectionView
您应该会看到aLabel.backgroundColor = [UIColor redColor];
aReflectionView.backgroundColor = [UIColor blueColor];
在其超级视图中正确居中,但其中包含的aReflectionView
则不是。为什么不?因为这一行:
aLabel
由于UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(((self.view.bounds.size.width / 2) - 150), 0, 300, 90)];
中包含aLabel
,因此它应位于aReflectionView
范围内,而不是aReflectionView
的范围内。向右滚动以查看更改:
self.view
出于您的目的,最好让UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(((aReflectionView.bounds.size.width / 2) - 150), 0, 300, 90)];
填充aLabel
:
aReflectionView
答案 2 :(得分:0)
问题不在于UILabel中文本的对齐,而在于UILabel本身的对齐。具体来说,你是根据self.view的宽度(特别是宽度)创建UILabel中心对齐,但是你将它添加到aReflectionView(它更窄,偏离自我的左边缘)。查看,并已在屏幕中心)。在这种情况下,净效果是你从self.view的左边缘获得两次偏移,一次在aReflectionView的x坐标中,然后再次在你放入的aLabel的x坐标中aReflectionView,显然不是你的意图。最简单的解决方法可能是:
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(((aReflectionView.bounds.size.width / 2) - 150), 0, 300, 90)];
底线,将标签置于您正在放置的视图上。
答案 3 :(得分:0)
对于那些谷歌搜索,我有他们的答案。问题是,我有一些转义字符在代码中指定一个新行,如下所示:
self.emptyLabel.text = @"No likes yet! \n\
\
\n(Like some cards to save them here)";
这导致文本偏离中心。只需将它们删除即可:
self.emptyLabel.text = @"No likes yet! \n\n(Like some cards to save them here)";