如何利用autolayout使UILablediv 自适应宽度度

主题 : autolayout 动态高度如何设置
级别: 新手上路
UID: 222908
可可豆: 257 CB
威望: 126 点
在线时间: 83(时)
发自: Web Page
来源于&&分类
autolayout 动态高度如何设置&&&
我现在有一个页面, 一个webview,底下一个label这个webview 的高度在57~160之间。 根据显示内容的不同而不同。然后底下的label,始终与web view的底部相距48.我设置了几个constraints1. webview的高度greater than 572. webview的高度less than 1603. label.top 距离 webview.bottom 48webview的高度在代码中设置frame但是,实际的效果是,webview的高度就直接定在了160。像这种需求有什么办法能用autolayout实现嘛?ps: 我这个页面是在一个很复杂的页面中的一部分,如果不用autolayout会特别复杂,而且还要兼容横竖屏。所以除非万不得已,不会禁用autolayout。
级别: 侠客
可可豆: 188 CB
威望: 189 点
在线时间: 265(时)
发自: Web Page
-(void)webViewDidFinishLoad:(UIWebView *)webView{&&&&NSString *height_str= [webView stringByEvaluatingJavaScriptFromString: @&document.body.offsetHeight&];&&&&height = [height_str intValue];&&&&NSLog(@&%d&,height);}动态回去webView 的内容高度,在计算吧。
级别: 新手上路
UID: 222908
可可豆: 257 CB
威望: 126 点
在线时间: 83(时)
发自: Web Page
回 1楼(mr.李) 的帖子
我也是在这个方法里面计算高度的。 用sizeThatFit计算的。能够计算出来,但是因为使用了autolayout,所以代码里面设置frame,不起作用了。
级别: 侠客
可可豆: 188 CB
威望: 189 点
在线时间: 265(时)
发自: Web Page
回 2楼(coco耗子) 的帖子
autolayout用不来,到现在都没懂他怎么个用法。
级别: 新手上路
UID: 319530
可可豆: 12 CB
威望: 6 点
在线时间: 0(时)
发自: Web Page
greater thanless than这两个是由屏幕的高度减去能确定高度的view的高度之后得到的值。比如:从上至下:UIButton webview UIlabel UIImageUIButton.height = 61UILabel.height = 50UIImage.height = 61横屏,(高320)autolayout算出的webview .height = 320-61-48-50-61= 100
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
内省值的方向考虑下吧
级别: 新手上路
可可豆: 2 CB
威望: 2 点
在线时间: 59(时)
发自: Web Page
auotlayout 得调整约束条件,调整frame不起作用
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版SDAutoLayout控件使用起来不错,发现之前比较麻烦的问题都被这个控件解决。非常棒的一个控件。
创建项目,加入控件
添加模型类
#import &Foundation/Foundation.h&
@interface News : NSObject
@property (nonatomic, copy) NSString *
@property (nonatomic, copy) NSString *
&添加单元格控件
#import &UIKit/UIKit.h&
#import "News.h"
@interface NewsCell : UITableViewCell
@property (nonatomic, strong) UILabel *
@property (nonatomic, strong) UILabel *
@property (nonatomic, strong) News *
#import "NewsCell.h"
#import "UIView+SDAutoLayout.h"
@implementation NewsCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self setup];
初始化单元格
- (void)setup {
1.把控件添加到父空间里
UILabel *labeltitle = [UILabel new];
labeltitle.textColor = [UIColor grayColor];
labeltitle.font = [UIFont systemFontOfSize:15];
[self.contentView addSubview:labeltitle];
self.labeltitle =
UILabel *labelcontent = [UILabel new];
labelcontent.textColor = [UIColor lightGrayColor];
labelcontent.font = [UIFont systemFontOfSize:14];
[self.contentView addSubview:labelcontent];
self.labelcontent =
2.添加约束
CGFloat margin = 10;
self.labeltitle.sd_layout
.leftSpaceToView(self.contentView, margin)
.topSpaceToView(self.contentView, margin)
.rightSpaceToView(self.contentView, margin)
.heightIs(20);
self.labelcontent.sd_layout
.leftEqualToView(self.labeltitle)
.rightEqualToView(self.labeltitle)
.topSpaceToView(self.labeltitle,margin)
.autoHeightRatio(0);
//.heightIs(0);这样写就不会显示出内容
3.需要制定底部参考控件
[self setupAutoHeightWithBottomView:self.labelcontent bottomMargin:margin];
- (void)setNews:(News *)news {
self.labeltitle.text = news.
self.labelcontent.text = news.
- (void)awakeFromNib {
// Initialization code
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
&添加控制器代码
NewsController.m
Created by zhangliang on 16/2/26.
Copyright & 2016年 com.crscic. All rights reserved.
#import "NewsController.h"
#import "MJExtension.h"
#import "UITableView+SDAutoTableViewCellHeight.h"
#import "NewsCell.h"
#import "News.h"
static NSString *reuseIdentifier = @"reuseIdentifier";
@interface NewsController ()
@property (nonatomic, strong) NSArray *
@property (nonatomic, strong) NSArray *
@implementation NewsController
- (void)viewDidLoad {
[super viewDidLoad];
self.list = @[
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情s,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,s绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后s几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆s茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完s顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此s明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此书,总体感觉是前面内容比较好,让我有了一些思考,后面的章节却难免落入了俗套,不过看了之后肯定是有一些收获的,个人给7/10分,个人觉得,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此书,总体感觉是前面内容比较好,让我有了一些思考,后面的章节却难免落入了俗套,不过看了之后肯定是有一些收获的,个人给7/10分,个人觉得,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
@{@"title":@"《把时间当作朋友》&&介绍几个十分有效的时间管理工具"
,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此书,总体感觉是前面内容比较好,让我有了一些思考,后面的章节却难免落入了俗套,不过看了之后肯定是有一些收获的,个人给7/10分,个人觉得,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"}
__weak __typeof(self) weakSelf =
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
self.news = [News objectArrayWithKeyValuesArray:self.list];
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.tableView reloadData];
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.news.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
if (cell == nil) {
cell = [[NewsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
News *news = self.news[indexPath.row];
cell.news =
#pragma mark -- 计算高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width];
阅读(...) 评论()UITableViewCell AutoLayout动态行高总结(兼容iOS7) - 简书
UITableViewCell AutoLayout动态行高总结(兼容iOS7)
最近在工作中遇到了一个问题,就是在AutoLayout中如何使UITableViewCell的行高根据内容(具体就是UILabel的多行显示)达到自适应高度。google so一通找到了一些资料,但都不是特别齐全,特别是针对iOS7的兼容上,因此也踩了不少坑,在这里做一个总结。
首先看一下效果
动态行高.png
其实在iOS8以上,cell的动态高度的实现已经变的很方便了,只需要你在cell里面正确设置约束,再设置tableview的几个属性,就大功告成了!
首先正确设置约束
设置约束.png
这里要注意的就是,一定要确保在设置约束之前,你UITableViewCell的size inspector里面 Row Height 是Default而不是custom的数值,否则之后不管你如何操作,UITableViewCell优先使用的都是custom的数值
行高为Default.png
还有一点要注意的是,如果你和我一样,是UILabel需要多行显示造成的行高不固定,那么你的UILabel的行数要设置为0,表示UILabel显示的是多行。
Lines为0.png
最后在viewDidLoad中加上
self.tableView.estimatedRowHeight = 56
self.tableView.rowHeight = UITableViewAutomaticDimension
estimatedRowHeight是假定的高度,因为需要预估UITableView的UIScrollView的contentSize。因此这种方法可能潜在的问题就是数据量大的时候滚动条可能会闪动。具体的解决方法还没有研究,应该可以通过UIScrollView的代理方法解决。UITableViewAutomaticDimension这一句在iOS8+是作为rowHeight的默认值的,这句话也可以不写。
至此iOS8+ AutoLayout的动态行高就大功告成了,你甚至可以不用去实现heightForRowAtIndexPath。
但是iOS7的兼容就显得蛋疼许多了,主要是由于,iOS7使用UITableView一定要实现heightForRowAtIndexPath代理方法,这里你可能会觉得,那我们实现这个代理方法,返回UITableViewAutomaticDimension就好了啊,遗憾的是UITableViewAutomaticDimension在iOS7里面也是不可用的,不信你可以试一下,直接crash。
所以我们的思路得这样走,实现heightForRowAtIndexPath, 创建一个临时的cell,设置cell里面各个view的属性,主动触发layout,通过UIView的方法systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)获取cell的实际尺寸,作为返回的高度。代码看起来像下面这样.
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -& CGFloat {
//兼容ios7
if NSFoundationVersionNumber & NSFoundationVersionNumber_iOS_8_0 {
let mockcell = tableView.dequeueReusableCellWithIdentifier(youtidentifier)
//设置你的cell的子view,比如UILabel的title
let height =
mockcell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height + 1
return height
return UITableViewAutomaticDimension
上面的代码需要注意的一点就是,tableView.dequeueReusableCellWithIdentifier这个方法千万不能传入indexPath,否则会死循环,一直调用该方法。
上面的代码其实还有一个很明显的问题,就是每一次计算高度都需要创建一次UITableViewCell,我们可以做一个简单的改进,用一个Dictionary&NSIndexPath,CGFloat&存储计算过的indexPath对应的height,代码如下。
private var heightOfIndex = [NSIndexPath:CGFloat]()
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -& CGFloat {
//兼容ios7
if NSFoundationVersionNumber & NSFoundationVersionNumber_iOS_8_0 {
if let height = self.heightOfIndex[indexPath] {
return height
let mockcell = tableView.dequeueReusableCellWithIdentifier(youtidentifier)
//设置你的cell的子view,比如UILabel的title
let height =
mockcell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height + 1
self.heightOfIndex[indexPath] = height
return height
return UITableViewAutomaticDimension
为了能够代码重用,我们可以把他封装成一个类,设置cell的过程作为一个block传入。
class ALTableViewCellHeight {
private var heightOfIndex = [NSIndexPath:CGFloat]()
func heightForRowAtIndexPath(indexPath:NSIndexPath,initCell:()-&UITableViewCell) -& CGFloat {
if NSFoundationVersionNumber & NSFoundationVersionNumber_iOS_8_0 {
if let height = self.heightOfIndex[indexPath] {
return height
let cell = initCell()
cell.layoutIfNeeded()
let height =
cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height + 1
self.heightOfIndex[indexPath] = height
return height
return UITableViewAutomaticDimension
最后再说说iOS7下UILabel的一个坑,如果要使你的UILabel能够正常的多行显示,除了一开始说到的设置numberOfLines为0,还需要设置preferredMaxLayoutWidth,这个属性指的当换行的最大宽度。iOS8+能够通过AutoLayout计算出UILabel的宽度,把这个宽度作为preferredMaxLayoutWidth,但是iOS7下面不行,应该是一个bug。解决的方案是继承UILabel,重写layoutSubviews。
class LabelDynamicHeight:UILabel {
override func layoutSubviews() {
super.layoutSubviews()
self.preferredMaxLayoutWidth = self.frame.size.width
super.layoutSubviews()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.numberOfLines = 0
会一点iOS和Web开发
/luowenxing
原文地址:/blog//shi-yong-autolayoutshi-xian-uitableviewde-celldong-tai-bu-ju-he-ke-bian-xing-gao/index.html 本文...
UITableViewCell 高度计算从混沌初始到天地交泰 本文主要基予iOS UITableViewCell 高度自适应计算问题展开陈述,废话少说直入正题: UITableView控件可能是iOS中大家最常用的控件了(滚动视图、cell重用、卡顿优化),今天要讨论的不是...
UITableViewCell 高度计算 UITableView 询问 cell 高度有两种方式:1.rowHeight属性。所有Cell都为固定高度,这种情况下最好不要使用下面第2种方法。2.- (CGFloat)tableView:(UITableView *)tabl...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
原文 : 与佳期的个人博客() 当我还是小白时(比现在更白的时候)对于 UITableViewCell 的行高问题还是比较头疼的,当然这个算是 iOS 开发中相当基础的内容了,但是当时的我就想过,将 UITableViewCell 的行高问题解...
国庆前一周和国庆期间,孩子都表现的很好。积极完作业,家里来客人也表现的很有礼貌。
十月七号下午有兴趣班。前一天我专门提醒过他了。因为他这段时间的表现,我是比较放心的。谁知到了时间,婆婆给我打电话,说他死活都不去上课。而我正在上班。电话里我还是在接纳他的想法。想玩了好...
电话里Sunny在喋喋不休的说着只恨自己是男儿身,师父都不搭理他。 听得我直乐,我们一起入职,现在是一个导师带着。之前他的导师是另外一个大神级人物,人很冷,但据说技术很牛,Sunny同学各种崇拜自己的师父,但无奈大神不鸟他。后来Leader让我师父带着我们俩,这不在现任师父...
最近多梦,还能在醒后记起。那我就尝试记载下,试图还原当时的情景。 来到一个陌生的地方,路灯下雾气满天,周围只有一个街道,陡坡上有座二层小楼,我拎着旧式牛皮箱子出现在这里,楼道里一片暗黑,不时会有粤剧唱腔飘出,房东是个中年男人,住在我的隔壁,不知怎的?他就突然闯进门,恶狠狠的...
有一种初恋,叫做我们彼此喜欢,却从未开始,于是也永远都不会结束。所以永远都只有想象里的清甜,而不会有一点点让记忆带上忧伤的酸涩。 入学二十周年的同学聚会,它的意义是什么? 如同那些电影和小说里,处处透出心机的味道吗?譬如比一比谁更性感高贵,亦或是谁童颜依旧,不排除有人会刻意...
翻开《读者》,恰巧在卷首与这篇文章相遇。 过小而难的生活。 “有日本哲人把生活分成四种:大而困难的、大而容易的、小而困难的、小而容易的。我们普通人得在后两种生活里选择。” 小而容易的生活,大概是人的本性所向往的了。“生活的压力最好都有别人承担,我要活得像个机器人,机械重复即...问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
刚学autolayout,关于这个问题,一直没搞清楚!
疑惑一:多个view(label)如何设置居中显示?
c[backview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[lab_before][lab_middle][lab_after]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(lab_before,lab_middle,lab_after)]];
枚举类型参数中:
ctypedef NS_OPTIONS(NSUInteger, NSLayoutFormatOptions) {
NSLayoutFormatAlignAllLeft = (1 && NSLayoutAttributeLeft),
NSLayoutFormatAlignAllRight = (1 && NSLayoutAttributeRight),
NSLayoutFormatAlignAllTop = (1 && NSLayoutAttributeTop),
NSLayoutFormatAlignAllBottom = (1 && NSLayoutAttributeBottom),
NSLayoutFormatAlignAllLeading = (1 && NSLayoutAttributeLeading),
NSLayoutFormatAlignAllTrailing = (1 && NSLayoutAttributeTrailing),
NSLayoutFormatAlignAllCenterX = (1 && NSLayoutAttributeCenterX),
NSLayoutFormatAlignAllCenterY = (1 && NSLayoutAttributeCenterY),
NSLayoutFormatAlignAllBaseline = (1 && NSLayoutAttributeBaseline),
NSLayoutFormatAlignAllLastBaseline = NSLayoutFormatAlignAllBaseline,
NSLayoutFormatAlignAllFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0) = (1 && NSLayoutAttributeFirstBaseline),
NSLayoutFormatAlignmentMask = 0xFFFF,
参数中的NSLayoutFormatAlignAllCenterX,该如何使用?每次使用都回报错!
附上报错信息:
cNSInvalidArgumentException|Unable to parse constraint format: \nOptions mask required views to be aligned on a horizontal edge, which is not allowed for layout that is also horizontal. \nH:|[lab_before][lab_middle][lab_after]| \n
libc++abi.dylib
0xc65bb4 &redacted& + 16\",\n
libc++abi.dylib
0xc65478 &redacted& + 0\",\n
libobjc.A.dylib
0x8204 &redacted& + 0\",\n
Foundation
0xce11cc &redacted& + 0\",\n
Foundation
0xb6bf44 &redacted& + 1296\"\n)|iPhone OS|8.1|1.0.0|iPhone7,1";
希望,各位大神指教!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
刚刚算是勉强自己解决了:方法比较笨,即用一个backview来包含3个label,然后计算3个label的宽度并赋值给外层的backview,最后把backview居中显示,就完成了3个label的居中显示!如果有更好的方法,欢迎补充,讨论!
层次结构是:
c// 设置水平布局
[backview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[lab_before]-[lab_middle]-[lab_after]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(lab_before,lab_middle,lab_after)]];
c// 设置backview宽度
[view addConstraint:[NSLayoutConstraint constraintWithItem:backview attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dynaContentView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:before_width+middle_width+after_width]];
// 设置backview居中显示
[view addConstraint:[NSLayoutConstraint constraintWithItem:backview attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dynaContentView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];
// 设置backview的高度
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[backview(==34)]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(backview)]];
有没有方法不计算每个label的宽度并赋值给superview的宽度,而是自动填充superview!
PS:我在测试的时候,发现不设置backview的宽度,就是整个屏幕的宽度!
c@interface CustomView1 : UIView
@property(nonatomic, strong) UILabel *label1;
@property(nonatomic, strong) UILabel *label2;
c@implementation CustomView1
-(id)init{
self = [super init];
_label1 = [UILabel new];
_label1.text = @"AAAAAA";
_label1.textColor = [UIColor blackColor];
_label1.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_label1];
_label2 = [UILabel new];
_label2.text = @"BBBBBB";
_label2.textColor = [UIColor orangeColor];
_label2.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_label2];
- (void)updateConstraints{
NSDictionary *views = NSDictionaryOfVariableBindings(_label1,_label2);
// label1的宽高
[self addConstraint:[NSLayoutConstraint constraintWithItem:_label1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:[_label1 intrinsicContentSize].width]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_label1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:[_label1 intrinsicContentSize].height]];
// label2的宽高
[self addConstraint:[NSLayoutConstraint constraintWithItem:_label2 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:[_label2 intrinsicContentSize].width]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_label2 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:[_label2 intrinsicContentSize].height]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_label1][_label2]|" options:NSLayoutFormatAlignAllBottom metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_label1]|" options:0 metrics:nil views:views]];
[super updateConstraints];
- (CGSize)intrinsicContentSize{
CGSize l1size = [_label1 intrinsicContentSize];
CGSize l2size = [_label2 intrinsicContentSize];
return CGSizeMake(l1size.width + l2size.width, l1size.height);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Q:有没有方法不计算每个label的宽度并赋值给superview的宽度,而是自动填充superview?
A:重写superview的updateConstraints和intrinsicContentSize方法
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
一个 containerview 包含3个 label
这3个 label 不要指定宽度,
约束 containerview 和 left+right 的边距约束
约束 left center right labels 的间距关系
约束 contrainerview 居中
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我也一直被这个问题困扰, 多个view想要剧中需要外部套用一个View,
如果手动设置计算frame就不会出现这个问题,
可见autolaout也是有缺点的。
该答案已被忽略,原因:
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:

我要回帖

更多关于 html宽度自适应 的文章

 

随机推荐