如何让uilabel从最顶端开始excel显示顶端标题行

默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。
1. 在显示文字时,首先计算显示当前的文字需要多宽和多高,然后将对应的UILabel的大小改变成对应的宽度和高度
CGSize maximumSize = CGSizeMake(300, 1);
NSString *dateString = @"day by day one more";
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 = dateF
2.此方法更加简单粗暴,但是很有效。其方法是在文本后面加多一些\n。
需要注意的是,\n后还得加至少一个空格,否则多余的\n会被UILabel忽略。
for(int i=0; i&newLinesToP i++)
self.text = [self.text stringByAppendingString:@"\n "];
3.最正统的方法,利用objective-c的category特性,修改UILabel的绘制代码。
#pragma mark VerticalAlign
@interface UILabel (VerticalAlign)
- (void)alignT
- (void)alignB
@implementation UILabel (VerticalAlign)
- (void)alignTop {
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width;
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&newLinesToP i++)
self.text = [self.text stringByAppendingString:@"\n "];
- (void)alignBottom {
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width;
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&newLinesToP i++)
self.text = [NSString stringWithFormat:@" \n%@",self.text];
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12542次
排名:千里之外
原创:23篇
(1)(6)(3)(3)(1)(4)(1)(1)(4)(2)UILabel 让文字置顶显示 - 简书
UILabel 让文字置顶显示
我们经常会遇到将Label中文字置顶,也就是将文字顶到Lable框的最顶端显示的需求,UILabel是无法对内容文字进行置顶处理的,所以,如果我们不对Label加以额外的设置,就会出现如下情况:
解决办法:我们可以通过sizeToFit方法解决它:
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((self.view.bounds.size.width - 200)/2, 100, 200, 150)];
label.backgroundColor = [UIColor yellowColor];
NSString *labelText = @"我不知道如何置顶,谁来告诉我?";
[label setText:labelText];
[label setNumberOfLines:0];
//让内容置顶
[label sizeToFit];
[self.view addSubview:label];
但是有些小伙伴会对内容置顶后的Label的frame有些顾虑,笔者也有,所以就在Label后方放置了一个和初始Label具有相同frame的红色背景,那么如果设置sizeToFit方法后,即使Label的frame有变化,我们也可以通过和红色背景的frame相对比而看出:
置顶前后frame对比
我们可以看到,文字内容置顶后,原Label的origin几乎没有变化,而bounds适应了文字,大小改变了。所以不难看出,通过sizeToFit方法,我们可以将Label的大小“刚好”紧贴文字外部,从而实现了置顶的效果。
iOS 开发 | 小厨 | 健身爱好者 | 上海
技术博客:https://knightsj.github.io/
GitHub: /knightsjiOS开发技巧 - 使UILabel中的文字吸顶(顶部对齐)
使用过UILabel,会发现UILabel可以设置三种对齐方式,靠左,居中,靠右。满心欢喜地以为原来就这么回事,苹果都帮我们做好了呀。
可是,接到一个需求是使文字在cell的子控件UILabel中文字吸顶,找了半天都没有这样的属性..
设置了UILabel的高度&=60,Lines=0,于是乎实现出来的效果是酱紫的:
产品并不买账,说了吸顶就是要吸顶哦,看起来美观一点~
苹果爸爸也没有那么体贴啊这个都不帮我们做…
这个时候只能靠聪慧的大(Stack)脑(Overflow)了。
经过苦苦搜寻,发现了几个解决办法哦,点击这里可以看!
原文撸主的需求和我很像,要在两行的UILabel中实现吸顶。
热心的网友给出了解决办法,其中有五个是比较好使的,大家可以根据需求自己采用哈!
1)用sizeToFit修改Label的高度
没法直接改变UILabel的垂直对齐方式(UILabel没有这个属性),但是把 label 的 frame 高度改小也能实现相同的效果。
为了看得清楚,把 label 背景标为橘黄色,如图:
如果内容长度超过一行,把numberOfLines设成 0(就是不限制行数)。
有一个问题是,不管你设置了文字是水平居中还是右对齐,那么执行完sizeToFit后 frame 宽度也缩小了,文字会缩到左上角,效果都比较差,如图:
解决方法是把 label 的宽度先用变量保存起来,执行完sizeToFit之后再设回来,就解决了上面的问题,如图:
另外要注意,sizeToFit 会把 label 的当前宽度当做最大宽度,执行之后宽度只会比变窄,不会变宽。
Last but not least! 如果你是使用Auto Layout 的 NIB 和 Storyboard,Mark Amery 在评论中补充了解决方案:
如果 nib 或 storyboard 里用了 autoLayout,那么在viewDidLoad调sizeToFit是不管用的,因为实际顺序是先执行viewDidLoad再执行 autoLayout,执行 autoLayout 的时候会把 sizeToFit 的结果覆盖掉。
不过,在viewDidLayoutSubviews里调sizeToFit是管用的。
2)末尾补充换行符”\n”
一个更简单粗暴的办法,是把UILabel的 “line break mode” 设为 “Clip”,然后直接在末尾加一些换行符。
myLabel.lineBreakMode = UILineBreakModeC
myLabel.text = [displayString stringByAppendingString:"\n\n\n\n"];
不过,这个方法不是万能的,当Label文字超出范围并且需要在末尾显示“…”就不行了,不会自动缩略末尾变成“…”。
3)用UITextField代替UILabel
用UITextField取代UILabel,默认就是顶端对齐的。
同时把userInterationEnabled设为NO,让它不能滚动。
4)重写UILabel的drawTextInRect:方法
创建一个UILabel的子类,用起来非常方便:
#import &Foundation/Foundation.h&
@interface TopLeftLabel : UILabel {
#import "TopLeftLabel.h"
@implementation TopLeftLabel
- (id)initWithFrame:(CGRect)frame {
return [super initWithFrame:frame];
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
textRect.origin.y = bounds.origin.y;
return textR
-(void)drawTextInRect:(CGRect)requestedRect {
CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
[super drawTextInRect:actualRect];
5)自定义UILabel的分类
直接上代码…:
#pragma mark VerticalAlign
@interface UILabel (VerticalAlign)
- (void)alignT
- (void)alignB
@implementation UILabel (VerticalAlign)
- (void)alignTop
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width;
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&= newLinesToP i++)
self.text = [self.text stringByAppendingString:@" \n"];
- (void)alignBottom
CGSize fontSize = [self.text sizeWithFont:self.font];
double finalHeight = fontSize.height * self.numberOfLines;
double finalWidth = self.frame.size.width;
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& newLinesToP i++)
self.text = [NSString stringWithFormat:@" \n%@",self.text];
调用只需用下面两行代码即可实现效果。
[myLabel alignTop]
[myLabel alignBottom]
在本项目中,使用第一种方式,一句代码就解决了问题!因为撸主是使用xib来做cell,一开始写在了layoutSubviews方法中
- (void)layoutSubviews{
[super layoutSubviews];
[self.captionLabel sizeToFit];
[self.containerView clipsToCornerRadius:8];
但是,出现了第二次滑动到指定位置才有效,并且有奇奇怪怪的效果:
考虑到是cell的重用缓存,以及view的生命周期顺序问题:layoutSubviews方法调用先于drawRect
我要在View绘制子控件时再次确定cell的布局,于是把代码放到drawRect中:
- (void)drawRect:(CGRect)rect{
[self.captionLabel sizeToFit];
[self.containerView clipsToCornerRadius:8];
如果还是有问题,可以考虑直接用其他方式,如后来出现有UILabel文字显示不全的现象,最后用方法二代替了~
本文已收录于以下专栏:
相关文章推荐
There's no way to set the vertical align on a UILabel,
but you can get the same effect by changing ...
如题使用UILabel时候想要文字靠右显示,但是不想顶着UILabel的尾部显示,类似于设置UIButton 的edge。 UILabel好像不可以直接设置edge,所以选择使用UILabel的att...
Java工程师的最佳学习路线!
JAVA老司机直播啦:通过对架构模式和学习主线的高度总结,可让你快速掌握Java学习的最佳路线,从而达到事半功倍的效果!戳我立即掌握!
默认情况下,UILabel中的文字距离顶段及底部都有一定的距离,但有时想要的效果确实顶端对齐。现总结学习过程中用到的两个方法。
       
        [self.myLabe...
默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。
如下图所示(图片来自stackoverflow):
比较郁闷的是,UILabel并不提供...
在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,博主参考国外网站,从UILabel继承了一个新类,实现了居上对齐,居中对齐,居下对齐。具体如下:
myUILabel.h...
[myLabel sizeToFit];
myLabel.numberOfLines = 0;
[myLabel sizeToFit];
前段时间千牛iOS版本也从iOS 6.0开始支持,所以可以正式引入Auto Layout来进行界面布局。
这里记录下在UILabel上应用Auto Layout进行布局的过程。一、业务场景
用三个U...
Vertically
align text to top within a UILabel
vote1636down
votefavorite
让UILabel的文字顶部对齐
NOV 20TH, 2011
xcode中默认的UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。
var customLabel
= new UILabel (new
RectangleF(10,10,300,30));
customLabel.Text
=&Display this t...
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)1342人阅读
技术点(48)
VerticalAlignment.h文件
#import&&UIKit/UIKit.h&
typedef&enum&VerticalAlignment {
&&&&VerticalAlignmentTop,
&&&&VerticalAlignmentMiddle,
&&&&VerticalAlignmentBottom,
} VerticalA
@interface&VerticallyAlignedLabel :&UILabel
@private&VerticalAlignment&verticalAlignment_;
@property&(nonatomic,&assign)&VerticalAlignment&verticalA
VerticalAlignment.m文件
#import&&VerticallyAlignedLabel.h&
@implementation&VerticallyAlignedLabel
@synthesize&verticalAlignment =&verticalAlignment_;
- (id)initWithFrame:(CGRect)frame
&&&&self&= [super&initWithFrame:frame];
&&&&if&(self) {
&&&&&&&&// Initialization code
&&&&return self;
- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment
&&&&verticalAlignment_&= verticalA
&&&&[self&setNeedsDisplay];
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
&&&&CGRect&textRect = [super&textRectForBounds:bounds&limitedToNumberOfLines:numberOfLines];
&&&&switch&(self.verticalAlignment)
&&&&&&&&case&VerticalAlignmentTop:
&&&&&&&&&&&&textRect.origin.y&=
bounds.origin.y;
&&&&&&&&&&&&break;
&&&&&&&&case&VerticalAlignmentBottom:
&&&&&&&&&&&&textRect.origin.y&=
bounds.origin.y&+ bounds.size.height&-
textRect.size.height;
&&&&&&&&&&&&break;
&&&&&&&&case&VerticalAlignmentMiddle:
&&&&&&&&&&&&// Fall through.
&&&&&&&&default:
&&&&&&&&&&&&textRect.origin.y&=
bounds.origin.y&+ (bounds.size.height&-
textRect.size.height) /&2.0;
&&&&return&textR
-(void)drawTextInRect:(CGRect)requestedRect {
&&&&CGRect&actualRect = [self&textRectForBounds:requestedRectlimitedToNumberOfLines:self.numberOfLines];
&&&&[super&drawTextInRect:actualRect];
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:86625次
积分:1214
积分:1214
排名:千里之外
原创:28篇
转载:31篇
(1)(2)(6)(5)(1)(1)(4)(2)(2)(3)(1)(8)(5)(2)(3)(8)(3)(2)iPhone寮

我要回帖

更多关于 柱状图顶端显示数字 的文章

 

随机推荐