• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 使用objective-c/core图形的水平居中文本

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:32:11 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试使用 Core Graphics 使文本在 iPhone 屏幕上居中,我发现 this code .

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
NSString * text = @"text";
CGFloat minHeight = 40;
float widthIs = [text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, minHeight) options:NSStringDrawingUsesLineFragmentOrigin
attributes{ NSFontAttributeName:[UIFont systemFontOfSize:22.0] }
context:nil].size.width;
CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1 green:1 blue:1 alpha:1].CGColor);
[text drawAtPoint:CGPointMake((screenWidth - widthIs)/2, (screenHeight - minHeight)/2) withFont: [UIFont systemFontOfSize:22.0]];

但是为我自己尝试这段代码我无法真正让它工作。文本并没有真正集中在我的屏幕上,我不知道如何编辑代码来解决我的问题。

这是我得到的结果:

image



Best Answer-推荐答案


这看起来基本正确:一些小的观察:

  1. 我不指代 UIScreen,而只是指代呈现文本的 View 。例如。如果实际上在某些 UIView 子类实现中,您只需引用 self.bounds.size

  2. 我会使用 attributes 再现,不仅可以获取边界矩形的大小,还可以获取 drawAtPoint。例如。使用 drawAtPoint:withAttributes: 而不是 drawAtPoint:withFont:

  3. 字体颜色也应该是 attributes 字典的一部分。

例如:

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];

如果执行此操作后它仍未居中,则需要确认要在其中呈现它的 UIViewframe,并确保它是你认为应该在的地方。您可以在调试器中运行应用程序,然后使用 View 调试器 view debugger确认 View 的位置。

关于ios - 使用objective-c/core图形的水平居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48035494/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap