【发布时间】:2015-07-18 17:59:10
【问题描述】:
我有一个容器UIView 和一个UILabel。容器视图大小设置好了,然后我给UILabel添加文字,在标签上调用sizeToFit,将标签添加为容器视图的子视图。
然后我使用以下代码在容器视图中将标签居中:
viewCountLabel.frame = CGRectMake(viewCountContainer.frame.size.width/2 - viewCountLabel.frame.size.width/2, viewCountContainer.frame.size.height/2 - viewCountLabel.frame.size.height/2, viewCountLabel.frame.size.width, viewCountLabel.frame.size.height);
这是一个非常标准的代码,可以将某些东西集中到它的超级视图/容器中,而且它总是工作得很好。
但是,现在我有一个小问题。这个标签的文本是一个简单的数字。可以是 1、9、15、22 等。
我的问题是,当我将所有内容居中时,有些数字看起来偏离中心,即使它们在技术上完全居中。
这是一个示例图片,其中包含容器和标签的边框,因此您可以看到它们完美居中:
但这是没有边界的外观:
15 看起来不像是居中的,尽管它在技术上是居中的。它看起来有点太靠右了。如果我从 x 值中减去 2 或 3,它会在视觉上显示为居中,但这就是问题所在。
您如何设置逻辑以“直观地居中”此类标签的各种值?我觉得根据文本值设置一堆if 语句是矫枉过正的,只是对问题应用了创可贴。
我也尝试过使用NSTextAlignmentCenter,但这并没有什么不同。我不确定我是否错误地使用了NSTextAlignmentCenter,或者sizeToFit 是否存在潜在问题。
您会注意到该标签的蓝色边框在四周都有额外的空间,但最重要的是,对于这个问题,它的左右两侧都有额外的空间。我觉得这可能会导致这个问题,但我不确定如何解决这个问题,或者这是否就是问题所在。
这是我的代码:
// Setup view count label container
UIView *viewCountContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 95, 95)];
viewCountContainer.frame = CGRectMake(self.view.frame.size.width/2 - viewCountContainer.frame.size.width/2, 87, viewCountContainer.frame.size.width, viewCountContainer.frame.size.height);
// Setup + add number label to container
UILabel *viewCountLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.pushModal.frame.size.width, 95)];
viewCountLabel.textAlignment = NSTextAlignmentCenter;
viewCountLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:72];
viewCountLabel.textColor = [UIColor colorWithRed:0.278 green:0.278 blue:0.278 alpha:1];
viewCountLabel.text = [NSString stringWithFormat:@"%d", viewCount];
[viewCountLabel sizeToFit];
// Center the label to it's super view (viewCountContainer)
viewCountLabel.frame = CGRectMake(viewCountContainer.frame.size.width/2 - viewCountLabel.frame.size.width/2, viewCountContainer.frame.size.height/2 - viewCountLabel.frame.size.height/2, viewCountLabel.frame.size.width, viewCountLabel.frame.size.height);
[viewCountContainer addSubview:viewCountLabel];
[self.view addSubview:viewCountContainer];
【问题讨论】:
-
这真的取决于字体。能改吗?
标签: ios objective-c uilabel sizetofit