3

在此处输入图像描述

self.iconLabel.frame = self.contentView.frame;

self.iconLabel.font = [UIFont systemFontOfSize:100.0];
self.iconLabel.text = @"+";
self.iconLabel.textColor = [UIColor blackColor];
self.iconLabel.textAlignment = NSTextAlignmentCenter;

所以UILabel' 的框架与其容器视图 self.contentView 的大小相同

我还需要将“+”垂直居中,我希望它在中心。

我怎样才能做到这一点?

我唯一的想法是将 iconLabel.frame 向上移动。

编辑:从 self.iconImageView 更改为 self.contentView 这是一个UIView. 位于UILabelself.iconImageView 之上,这是一个UIImageView.

编辑 2:尝试实现 kshitij godara 的代码,结果是:

在此处输入图像描述

我稍微修改了代码:

CGSize constraint = CGSizeMake(self.contentView.frame.size.width, self.contentView.frame.size.height);

NSString *str = @"+";

UIFont *myFont = [UIFont systemFontOfSize:100.0];

CGSize stringSize = [str sizeWithFont:myFont constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];

self.iconLabel.frame = CGRectMake(0, 0, stringSize.width, stringSize.height);
self.iconLabel.font = myFont;
self.iconLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.iconLabel.numberOfLines = 0;
[self.iconLabel sizeToFit];
self.iconLabel.text = str;

编辑 3:

框架很大:

在此处输入图像描述

4

2 回答 2

4

这可能是字体本身的问题。每种字体都定义了它的形状、行为、排版等。字体似乎是视觉垂直中心的定位字符“+”。例如,您可以在任何其他包含字母“+”、“dog+Cat”的字符串上对其进行测试。“+”字母可能会像在您的图像上一样绘制在底部附近。

从我的角度来看,您有两个选择:

  • 使用图标图像代替“+”号。这将是最简单和最好的工作解决方案
  • 使用经过编辑的自定义字体在视觉上看起来完全符合您的需要(字母“+”在其排版中完全居中)。这可能是非常痛苦和耗时的选择

编辑:关于第二个选项:我已经按照本教程完成了这样一个程序来修复一些未对齐的字体。但是它仍然只是修复了整个字体,而不是基于单个字符

于 2013-09-17T17:05:25.300 回答
0

你可以这样做——尝试应用这个

CGSize constraint = CGSizeMake(iconImageFrame.size.width,1000.0f);

//Now Calculate size of string 

NSString *str = @"+";

//Always give the same font to calculate size which you giving for label 

UIFont *myFont = [UIFont systemFontOfSize:100.0];

CGSize stringSize = [str sizeWithFont:myFont 
                           constrainedToSize:constraint
                               lineBreakMode:UILineBreakModeWordWrap];
//now set same font for uilabel and also make it to fit to size 
//like this

UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(myIconLabelFrame.x,myIconLabelFrame.y,stringSize.width,stringSize.height)];

myLabel.font = myFont;
myLabel.lineBreakMode = UILineBreakModeWordWrap;
myLabel.numberOfLines = 0;
[myLabelsizeToFit];
myLabel.text = str;

由于现在标签将完全适合大小,因此它将始终位于中心。此代码也可用于动态增加标签的高度。我希望它能解决你的问题。谢谢!

于 2013-09-17T17:13:07.377 回答