直接和尽可能多地提供信息以构想这个问题,以便给出明确的答案。 甚至有照片!

我有一个简单的UILabel子类(该子类可渲染笔触文本)。

标头:

//  svCustomNumeralLabel.h

#import <UIKit/UIKit.h>

@interface svCustomNumeralLabel : UILabel

@property UIFont *customFont;
@property CGPoint drawPoint;

@end

完成实施:

#import "svCustomNumeralLabel.h"

@implementation svCustomNumeralLabel

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self initialize];
    }
    return self;
}


-(id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self initialize];
    }
    return self;
}


-(void)initialize{
    self.customFont =  [UIFont fontWithName:@"Forgotten Futurist" size:200.0];
    self.drawPoint = CGPointMake(-10.0,-39.0);

    float capHeight = self.customFont.capHeight;
    NSLog(@"Cap height: %f", capHeight);
}


- (void)drawRect:(CGRect)rect
{

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);//RGBA
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
    CGContextSetTextDrawingMode(context, kCGTextFillStroke);

    float descender = self.customFont.descender;
    float ascender = self.customFont.ascender;

    NSLog(@"Ascender: %f descender: %f", ascender, descender);

    CGSize frameSize = self.frame.size;
    NSLog(@"Frame width: %f height: %f", frameSize.width, frameSize.height);

    CGSize unDrawnSize = [self.text sizeWithFont:self.customFont];
    NSLog(@"Undrawn width: %f height: %f", unDrawnSize.width, unDrawnSize.height);

    CGSize drawnSize = [self.text drawAtPoint:self.drawPoint withFont:self.customFont];
    NSLog(@"Drawn width: %f height: %f", drawnSize.width, drawnSize.height);

}

我已经将此类的实例放入Interface Builder中的UIView中。 svCustomNumeralLabel的视图已在IB中手动调整为80.0宽,127.0高度。

我已经通过试错将initialize()方法中的self.drawPoint的值设置为其当前值(-10.0, -39.0)

使用这些手动设置和硬接线的值,结果是一个很好的数字,准确地定位在其容器框架内(为清楚起见,将其设置为灰色背景): svCustomNumeralLabel屏幕抓图

上面运行的NSLog输出:

Cap height: 126.600006
Ascender: 165.601562 descender: -58.400002
Frame width: 80.000000 height: 127.000000
Undrawn width: 100.000000 height: 229.000000
Drawn width: 99.200005 height: 229.000000

我的问题

我如何以编程方式确定self.drawPoint的值以实现此结果,即在确切的左上角呈现“ 0”字符?

第二个问题:如何为实际渲染的字符的精确宽度和高度计算一个正确的值,以利于其外观的美观和贴合?

NSLog输出中可以看到,几乎没有可用的信息与所绘制的实际数字非常相似。 与框架尺寸相关的唯一度量标准是UIFont.capHeight 似乎没有可用来确定self.drawPoint(-10.0, -39.0)偏移值的信息。

===============>>#1 票数:0

AppKit为Foundation Framework的NSString提供了一些不错的添加: NSString UIKit添加

特别感兴趣的是- (CGSize)sizeWithFont:(UIFont *)font和相关方法。

  ask by davidf2281 translate from so

未解决问题?本站智能推荐:

2回复

如何在不关心尺寸的情况下制作斜体UILabel?

我有一个UILabel,我的text或attributedText text attributedText我以编程方式更新。 在某些情况下,我想把它用斜体。 我可以: A)设置UILabel.font属性: B)或使用属性字符串做类似的事情: 但我不想在意大小。 我只
1回复

NSString sizeWithFont行间距

我有一个UITableView,其中每个单元格使用Core Text绘制一些文本。 在计算要返回heightForRow的高度时,我使用NSString sizeWithFont来确定单元格的高度。 但是,在我的核心文本绘图中,我将每行之间的空间增加几位小数。 问题是,如何在我的hei
1回复

如何绘制NSString atPoint withAttributes和调整大小?

我可以绘制我的NSString,但是在绘制它们时我无法调整大小。 我的drawRect:方法是: textAttributes看起来不错,并且字体信息返回为: 我可以使用属性数组正确更改颜色,为什么这会导致文本成为默认的10pt大小?
1回复

如何在iOS中以编程方式使用customFont样式

我要使用Proxima Nova的 Semibold和Bold样式。 为此,我在应用程序资源中添加了Proxima Nova,Proxima Nova Semibold和Proxima Nova Bold字体。 我已经在info.plist文件中进行了正确输入,并且还确保在复制捆绑包资源
4回复

如何在Objective-c中在没有ThirdParty库的情况下向我的NSString显示粗体和斜体

这是我尝试的代码: 输出: 该应用程序功能仅适用于美国境内的用户 但是我要美国同时使用Bold和Italic。 请指导我添加我的字符​​串。 谢谢, 米希尔
5回复

如何在objective-c中以编程方式更改字体的样式

我想以编程方式更改字体的样式(如粗体,常规,浅色,倾斜)。 我知道我可以使用IB,但我想用编程方式更改它。 需要一些指导。 对不起,如果这是一个愚蠢的问题。 例如,我的代码如下所示: 我想添加常规的风格。我该怎么做?
1回复

将自定义字体添加到项目,以编程方式将项目添加到plist

我想在项目中添加一些字体。 我的项目中有包含字体的目录。 因此,我可以通过以下方式访问我的字体: 但是如何将其添加到我的项目中,这样我就可以像这样调用它: 我只对如何以编程方式执行此操作感兴趣,我假设我必须将其添加到我的plist中,但是我可以以编程方式执行此操作吗?
4回复

如果更改基线偏移量属性,则UILabel属性文本不能有多行

我想用一个词来更改括号的基线偏移,例如“ [推] blablabla”。 但标签的第二行消失并被截断。 有人有主意吗?
1回复

通过编程按设备调整字体大小

我试图更改UILabel的文本,以使每个设备的文本看起来完全相同。 在这里,我有4种不同的模拟器: 8Plus, 7, 5s, XR顺序。 如您所见,这些文本看起来有所不同。 在第一个模拟中,它比第三个模拟的要小。 如何使每个设备缩放比例和外观相同,即文本尊重包装盒的尺寸?
3回复

以编程方式设置RGB

我们如何以编程方式设置标签文本的颜色,我的颜色是R 77 G 104 B 159我尝试了以下代码但没有用。