2015-05-07 14 views
2

我有一个容器UIViewUILabel。容器视图大小已设置,然后我将文本添加到UILabel,在标签上调用sizeToFit,并将标签添加为容器视图的子视图。当实际中心关闭时,将UILabel对准其超级视图

然后我用下面的代码中心集装箱视图内侧的标签:

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等

我的问题是,当我集中一切,一些数字看中心,即使他们在技术上完全居中。

下面是一个例子PIC与边框容器和标签两个,所以你可以看到,他们都完全居中:

enter image description here

但这里是它的外观没有国界:

enter image description here

15看起来不像它的居中,即使它在技术上是。它看起来有点偏离右边。如果我从x值中减去2或3,它会在视觉上看起来居中,但看到这就是问题所在。

如何设置逻辑以“视觉中心化”这样的标签的各种值?我觉得根据文本值设置一堆if声明是过度杀伤性的,并且只是对该问题应用了一个bandaid。

我也试过使用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]; 
+1

这真的取决于字体。你可以改变它吗? – picciano

回答

0

不幸的是没有“完美”的方式做到这一点。我为标签添加了字符间距,尝试将其宽度设置为超级视图的宽度和居中等,但您永远无法动态地完成此操作,并以此方式实现完美。

每次我都能看到这个完美的唯一方法就是如果先制作UILabel,然后以编程方式在它周围绘制一个圆圈,然后居中放置标签。

这或为每个数字添加逻辑并以这种方式对其进行视觉对中的困难方式。

相关问题