zoukankan      html  css  js  c++  java
  • 让UILabel的文字顶部对齐

    参考资料

    http://stackoverflow.com/questions/1054558/how-do-i-vertically-align-text-within-a-uilabel 

    方法一

    在显示文字时,首先计算显示当前的文字需要多宽和多高,然后将对应的UILabel的大小改变成对应的宽度和高度。此方法的相示意图如下:

    在显示文字时,首先计算显示当前的文字需要多宽和多高,然后将对应的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
    @interface UILabel (VerticalAlign)
    - (void)alignTop;
    - (void)alignBottom;
    @end

    // -- file: UILabel+VerticalAlign.m
    @implementation UILabel (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
  • 相关阅读:
    Android 自动化测试 Emmagee
    接口测试
    office2010
    MonkeyRecorder
    反编译android的apk
    基于标准库的string类实现简单的字符串替换
    C++中如何在顺序容器中删除符合特定条件的元素
    结合示例说明C++中const和指针结合时怎么理解
    C++中const使用注意要点(二)
    C++中const使用注意要点(一)
  • 原文地址:https://www.cnblogs.com/soulDn/p/5913416.html
Copyright © 2011-2022 走看看