Ios 使用objective-c/core图形的水平居中文本
我试图用核心图形在iPhone屏幕上居中显示文本,结果发现 但是,我自己尝试这个代码,却无法真正让它工作。文本并没有真正集中在我的屏幕上,我不知道如何编辑代码来解决我的问题 这是我得到的结果:Ios 使用objective-c/core图形的水平居中文本,ios,objective-c,core-graphics,Ios,Objective C,Core Graphics,我试图用核心图形在iPhone屏幕上居中显示文本,结果发现 但是,我自己尝试这个代码,却无法真正让它工作。文本并没有真正集中在我的屏幕上,我不知道如何编辑代码来解决我的问题 这是我得到的结果: 这看起来基本正确:一些小的观察结果: 我不是指ui屏幕,而是指文本呈现的视图。例如,如果实际上在一些UIView子类实现中,您只需参考self.bounds.size 我将使用属性格式副本不仅获取边界矩形的大小,还用于绘图点。例如,使用drawAtPoint:withAttributes:代替drawAt
这看起来基本正确:一些小的观察结果:
ui屏幕
,而是指文本呈现的视图。例如,如果实际上在一些UIView
子类实现中,您只需参考self.bounds.size
属性
格式副本不仅获取边界矩形的大小,还用于绘图点
。例如,使用drawAtPoint:withAttributes:
代替drawAtPoint:withFont:
属性
字典的一部分CGSize viewSize = self.bounds.size;
NSString *text = @"text";
CGFloat minHeight = 40;
NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:22.0], NSForegroundColorAttributeName: [UIColor redColor]};
CGSize textSize = [text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, minHeight)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil].size;
[text drawAtPoint:CGPointMake((viewSize.width - textSize.width)/2, (viewSize.height - textSize.height)/2) withAttributes:attributes];
如果执行此操作后仍不居中,则需要确认渲染此内容的
UIView
的frame
,并确保它位于您认为应该位于的位置。您可以在调试器中运行应用程序,然后使用视图调试器确认视图的位置。其他人已经声明您的代码基本上是正确的,那么为什么它不在您期望的位置显示文本呢
我的猜测是,你没有在你认为你是和/或对坐标系感到困惑的视图中绘制
使用当前视图的边界而不是屏幕将使文本在该视图中居中,如果视图本身在屏幕上居中则可以,但如果视图本身不居中则也会显示偏心
您应该弄清楚实际在哪个视图中绘制和/或读取坐标系
要在屏幕中心绘制文本,无论视图如何,都可以按照屏幕坐标计算原点,然后将其转换为视图坐标并在那里绘制。例如,如果您的代码位于视图的drawRect
中,则类似于:
// Save the point in screen coordinates
CGPoint onScreenOrigin = CGPointMake((screenWidth - widthIs)/2, (screenHeight - minHeight)/2);
// Convert from screen to current view's coordinates
CGPoint inViewOrigin = [self convertPoint:onScreenOrigin fromView:nil];
// Draw the text
[text drawAtPoint:inViewOrigin ...];
无论视图的大小和位置如何,这将在屏幕中心绘制文本-当然,前提是视图覆盖了屏幕上需要文本的区域,否则文本将被裁剪到视图中,并且可能不完整或完全不可见
HTH您能用您的解决方案更新上面的代码吗?对不起,我是新来的目标等…:/@Rob当你说你在另一个StackOverflow问题中找到了答案时,请实际链接到该问题(或直接链接答案)。更新@DavidStockingerIn在这个分屏多任务的时代,我认为你永远都不想用屏幕尺寸来判断事情的走向…@Rob-Fair point,OP最好使用故事板的主视图。但无论哪种方式,OP看起来要么不是在他们认为的视图中绘制,要么是在错误的视图坐标系中绘制-这就是为什么他们的文本偏离中心的原因。仅使用视图边界不一定能解决这一问题(例如,如果视图未居中)。我想对细节进行质疑(拆分视图控制器或其他视图控制器包含场景如何),但我绝对同意您的诊断,即这可能是坐标系转换错误。
// Save the point in screen coordinates
CGPoint onScreenOrigin = CGPointMake((screenWidth - widthIs)/2, (screenHeight - minHeight)/2);
// Convert from screen to current view's coordinates
CGPoint inViewOrigin = [self convertPoint:onScreenOrigin fromView:nil];
// Draw the text
[text drawAtPoint:inViewOrigin ...];