在网上,Mac开发的资料比较少,我们在Mac开发中用的Cocoa框架(包含Foundation和AppKit框架)远没有Cocoa Touch框架(包含Foundation和UIKit框架,运用于ios开发)智能。所以有时候我们不得不自己动手去做一些适配。
比如,我最近在项目开发中要开发一个IM的功能,所以要写一个聊天的页面,要通过内容计算行高和宽度适配。在查询文档之后,总结了一下:(需要计算高度和宽度)
定义一个NSTextField:
NSTextField* contentField = [[NSTextField alloc] initWithFrame:NSMakeRect(10, 5, self.frame.size.width-60, self.frame.size.height-40)];
if(contentField )
{
contentField .tag = TAG_CONTENT;
contentField .autoresizingMask = NSViewMinYMargin|NSViewMaxYMargin|NSViewWidthSizable;
contentField .stringValue = @"";
contentField .font = [NSFont systemFontOfSize:14];
contentField .backgroundColor = [NSColor colorWithDeviceRed:21.0/255.0 green:124.0/255.0 blue:251.0/255.0 alpha:1.0f];
contentField .textColor = [NSColor colorWithDeviceRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0f];
[contentField setBordered:NO];
[contentField setEditable:NO];
[contentField setSelectable:YES];
contentField.layer.masksToBounds = YES;
contentField.layer.cornerRadius = 6;
contentField .preferredMaxLayoutWidth = self.frame.size.width-60;
// contentField.alignment = NSTextAlignmentCenter;//水平显示方式
contentField.maximumNumberOfLines = 20;//最多显示行数
//设置断行模式
[[contentField cell] setLineBreakMode:NSLineBreakByCharWrapping];
//设置是否启用单行模式
[[contentField cell]setUsesSingleLineMode:NO];
//设置超出行数是否隐藏
[[contentField cell] setTruncatesLastVisibleLine: YES ];
[self.backView addSubview:contentField ];
}
下面通过外界给contentField赋值:
NSTextField *contentTF= [self viewWithTag:TAG_CONTENT];
NSString *content = chatInfo[@"content"];
contentTF.stringValue = content;
通过适配计算宽度(因为需要当宽度超过一定宽度的时候,需要换行): [contentTF sizeToFit];
//计算宽度和高度
CGFloat frameMidX = self.bounds.size.width;
CGFloat frameHalfWidth = (NSWidth(contentTF.frame));
CGFloat diff = frameMidX - frameHalfWidth-40;
if (diff <0) {
// 当超过设定宽度的时候
NSTextField *textField = [[NSTextField alloc] initWithFrame:
CGRectMake(0, 0,self.frame.size.width-60, 1000)];
textField .font = [NSFont systemFontOfSize:14];
textField.stringValue =content;
NSSize size = [textField.cell cellSizeForBounds:textField.frame];
contentTF.frame = NSMakeRect(10, 5, self.frame.size.width-60, size.height);
}else{
contentTF.frame = NSMakeRect(10,5,
frameHalfWidth,
NSHeight(contentTF.frame));
}
这是我在开发中总结的一些经验,也许您有更好的办法,欢迎您来指导交流
欢迎关注我 因为信仰:参与留言讨论Mac开发--NSTextField自定义行高及文字居中