• UILabel顶端对齐


    ode中默认的UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。

     

     比较郁闷的是,UILabel并不提供设置其垂直对齐方式的选项。所以如果你想让你的文字顶部对齐,那么就需要自己想办法了。
     stackoverflow.com 上提供了几种方法来达到顶部对齐的效果。
    方法一:
    在显示文字时,首先计算显示当前的文字需要多宽和多高,然后将对应的UILabel的大小改变成对应的宽度和高度。
    该方法的代码如下:

    CGSize maximumSize =CGSizeMake(300,9999);
    NSString*dateString =@"The date today is January 1st, 1999";
    UIFont*dateFont =[UIFont fontWithName:@"Helvetica" size:14];
    CGSize dateStringSize =[dateString sizeWithFont:dateFont 
    constrainedToSize:maximumSize 
    lineBreakMode:self.dateLabel.lineBreakMode];
    CGRect dateFrame =CGRectMake(10,10,300, dateStringSize.height);
    self.dateLabel.frame = dateFrame;

    方法二: 
    此方法更加简单粗暴,但是很有效。其方法是在文本后面加多一些 。
    需要注意的是, 后还得加至少一个空格,否则多余的 会被UILabel忽略。从这一点上看,UILabel似乎又过于“聪明”了。
    该方法的代码如下:

    for(int i=0; i<newLinesToPad; i++)
    self.text =[self.text stringByAppendingString:@" "];

     方法三:最正统的方法,利用objective-c的category特性,修改UILabel的绘制代码。示例代码如下:

    // -- file: UILabel+VerticalAlign.h
    #pragma mark VerticalAlign
    @interfaceUILabel(VerticalAlign)
    -(void)alignTop;
    -(void)alignBottom;
    @end

    // -- file: UILabel+VerticalAlign.m
    @implementationUILabel(VerticalAlign)
    -(void)alignTop {
    CGSize fontSize =[self.text sizeWithFont:self.font];
    double finalHeight = fontSize.height *self.numberOfLines;
    double finalWidth =self.frame.size.width;//expected width of label
    CGSize theStringSize =[self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight)lineBreakMode:self.lineBreakMode];
    int newLinesToPad =(finalHeight - theStringSize.height)/ fontSize.height;
    for(int i=0; i<newLinesToPad; i++)
    self.text =[self.text stringByAppendingString:@" "];
    }

    -(void)alignBottom {
    CGSize fontSize =[self.text sizeWithFont:self.font];
    double finalHeight = fontSize.height *self.numberOfLines;
    double finalWidth =self.frame.size.width;//expected width of label
    CGSize theStringSize =[self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight)lineBreakMode:self.lineBreakMode];
    int newLinesToPad =(finalHeight - theStringSize.height)/ fontSize.height;
    for(int i=0; i<newLinesToPad; i++)
    self.text =[NSString stringWithFormat:@" %@",self.text];
    }
    @end

  • 相关阅读:
    HDU 4924 Football Manager(状压DP)
    android 为图片去灰
    关于invalidate和postInvalidate
    有点感想人月神话
    ObjectiveC语法快速参考
    Paint类 主要方法介绍
    关于游戏开发中的碰撞检测(转)
    两集合求交集的算法比较(转)
    Java编程中“为了性能”需做的26件事(转)
    android WebView总结(转)
  • 原文地址:https://www.cnblogs.com/yu0806/p/4279879.html
Copyright © 2020-2023  润新知