Mac开发--NSTextField自定义行高及文字居中

11 篇文章 0 订阅

在网上,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自定义行高及文字居中​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值