iOS AutoLayout UIButton自适应文字高度

遇到了个需求,需要在使用AutoLayout中,按钮文字数量不确定的情况下对按钮高度做相应的适配,使用了很多网上的办法都不太可行。

但是这个博客给我一些办法:http://www.cnblogs.com/xiaobai51/p/5557988.html

 

按照该作者的实现方式,我也做出了相应的调整。

示例代码如下:

 

- (void)viewDidLoad {
    [super viewDidLoad];
    
   //  动态创建多个button
for (int i = 0; i < 5; i++) { UIButton *button = [[UIButton alloc] init];
     //  禁用AutoResizing button.translatesAutoresizingMaskIntoConstraints
= NO; [button setTitle:@"有很多字有很多字有很多字有很多字" forState:UIControlStateNormal];
     //  边框和颜色 button.layer.borderWidth
= 1; button.titleLabel.numberOfLines = 0; button.layer.borderColor = [[UIColor blueColor] CGColor]; [button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; // [button setTitleEdgeInsets:UIEdgeInsetsMake(20, 20, 20, 20)]
     //  换行方式 [button.titleLabel setLineBreakMode:NSLineBreakByWordWrapping]; [self.view addSubview:button];
     //  文字居中 button.titleLabel.textAlignment
= NSTextAlignmentCenter;
     //  按钮内的Label文字约束 [button.titleLabel mas_makeConstraints:
^(MASConstraintMaker *make) { make.edges.equalTo(button).insets(UIEdgeInsetsMake(10, 10, 10, 10)); // make.bottom.equalTo(button.mas_bottom).offset(10); }]; //  按钮自身约束 [button mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view.mas_top); make.width.equalTo(self.view.mas_width).multipliedBy((float)1/5); if (i == 0) { make.left.equalTo(self.view.mas_left); }else{ make.left.equalTo([[self.view.subviews objectAtIndex:i - 1] mas_right]); } }];
//  视图在AutoLayout下,如需获取frame需要使用一下语句或重载viewDidLayoutSubview [button layoutIfNeeded]; NSLog(
@"w: %f, h: %f", [self.buttons[0] titleLabel].bounds.size.width, [self.buttons[0] titleLabel].bounds.size.height); NSLog(@"w: %f, h: %f", [self.buttons[0] bounds].size.width, [self.buttons[0] bounds].size.height); } }

最后图片:

 

posted @ 2017-10-30 15:49  timelog  阅读(1416)  评论(0编辑  收藏  举报