实现UILabel高度和宽度的自适应和UITextView的高度自适应

lianjie:http://blog.csdn.net/shave_kevin/article/details/46841935

part1:

代码如下:
在实际工作过程中 你需要实现宽度和高度自适应。下面有两个方法,一个实现宽度自适应一个实现高度自适应.
//ios6 及其以上同样适应。
//声明
@interface UILabel (AutoSizeMakeWidthORHeight)
- (void)setTitleWidth:(NSString *)title Font:(UIFont *)font BackgroundColor :(UIColor *)bacColor TitleColor :(UIColor *)titleColor;


- (void)setTitleHeight:(NSString *)title Font:(UIFont *)font BackgroundColor :(UIColor *)bacColor TitleColor :(UIColor *)titleColor;


//宏定义
#define SKCGSizeMake [UIScreen mainScreen].bounds.size.width,8000

//实现
@implementation UILabel (AutoSizeMakeWidth)
- (void)setTitleWidth:(NSString *)title Font:(UIFont *)font BackgroundColor :(UIColor *)bacColor TitleColor :(UIColor *)titleColor{
    self.text = title;
    self.font = font;
    self.textColor = titleColor;
    self.backgroundColor = bacColor;
   CGSize labelsize;
    float version = [selfgetSysBundle];
    if (version <=6.0) {
        labelsize = [self.textsizeWithFont:self.fontconstrainedToSize:CGSizeMake(SKCGSizeMake)lineBreakMode:UILineBreakModeWordWrap];
    }
    else {
        CGRect rect = [self.textboundingRectWithSize:CGSizeMake(SKCGSizeMake)
                                              options:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesFontLeading  |NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName: self.font}
                                              context:nil];
        labelsize = rect.size;
    }
    [selfsetFrame:CGRectMake(self.frame.origin.x,self.frame.origin.y, labelsize.width, self.frame.size.height)];

    
}



- (void)setTitleHeight:(NSString *)title Font:(UIFont *)font BackgroundColor :(UIColor *)bacColor TitleColor :(UIColor *)titleColor {
    
    self.text = title;
    self.font = font;
    self.textColor = titleColor;
    self.backgroundColor = bacColor;
    self.numberOfLines =0;
 
CGSize labelsize;
    float version = [selfgetSysBundle];
    //支持ios 6.0
    if (version <=6.0) {
        labelsize = [self.textsizeWithFont:self.fontconstrainedToSize:CGSizeMake(SKCGSizeMake)lineBreakMode:UILineBreakModeWordWrap];
    } else {
        //版本 7.0 +可用
        CGRect rect = [self.textboundingRectWithSize:CGSizeMake(SKCGSizeMake)
                                              options:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesFontLeading  |NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName: self.font}
                                              context:nil];
        labelsize = rect.size;
    }
    [selfsetFrame:CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width, labelsize.height)];
//这句话必须写 sizeToFit
    [selfsizeToFit];
    
}
part2:
实现TextView的高度自适应
前提:只有高度是改变的.其他的位置相对不变.
首先的是把textview 的scrollEnabled 属性设置成NO,这样就不可以滑动了。
然后设置一下textview 的代理
 写下textview 的代理方法:
然后重新设置一下frame
- (void)textViewDidChange:(UITextView *)textView {
    CGSize labelsize;
    CGSize newSize = CGSizeMake(100, 80000);
    labelsize = [_textView sizeThatFits:newSize];
    _textView.frame = CGRectMake(_textView.frame.origin.x,_textView.frame.origin.y, _textView.frame.size.width, labelsize.height);
}
上面的是用代码实现的textview 没有加约束
下面有一个是用stroryboard 写的使用约束 的
首先我们想改变它的高 把它的高的约束拉出来
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heights;
//拉出来以后在代理方法里面更改高度然后约束改变 就好了
- (void)textViewDidChange:(UITextView *)textView{

    CGSize labelsize;
    CGSize newSize = CGSizeMake(_textView.frame.size.width, 80000);
    labelsize = [_textView sizeThatFits:newSize];
//更改高度
    _heights.constant = labelsize.height;
//更改约束
    [self updateViewConstraints];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值