【TIP】scrollview中的autolayout小技巧

还是先来看个需求:


03教师风采.png

由图可知,这个界面由两个label和一个imageview组成,imageview是大图需要按比例显示,底下的介绍文字可能会很多所以高度也是动态的,这种组合情况比较简单所以就不用tableview或者webview之类的视图控件了,直接用scrollview即可。

下面简单的铺设下这个页面:

@interface ViewController : UIViewController

@property (nonatomic , weak) IBOutlet UILabel *nameLabel;
@property (nonatomic , weak) IBOutlet UIImageView *photoImageView;
@property (nonatomic , weak) IBOutlet UILabel *contentLabel;
@property (nonatomic , weak) IBOutlet NSLayoutConstraint *imageHeight;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.title = @"教师风采";
    [self configureUI];
    
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(editTeacher)];
    self.navigationItem.rightBarButtonItem = item;
}

- (void)editTeacher
{
}

- (void)configureUI
{
    [_nameLabel setText:@"托雷斯"];
    [_contentLabel setText:@"有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,有钱任性,"];
    [_photoImageView sd_setImageWithURL:[NSURL URLWithString:@"http://timg.aier360.com/headimg/big/7976f8e79bwfklbtpv.jpg"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        CGFloat height = 0;
        if (image) {
            height = ([UIScreen mainScreen].bounds.size.width - 16) * image.size.height / image.size.width;
        }
        [UIView animateWithDuration:0.25 animations:^{
            _imageHeight.constant = height;
            [self updateViewConstraints];
        }];
    }];
}
@end

这里有个小技巧,在storyboard里,双击下图这个地方,


QQ20141213-1.png

可以进入constrait的详情,然后可以将这条constraint IBOutlet出来,在controller里就可以根据图片的尺寸动态修改这个constrait的constant来改变布局了。

QQ20141213-2.png

至于contentLabel的按文字内容自动改变高度,只需简单的几个步骤:
1、设置好leading,trailing,width,height的约束
2、设置lineNumber和lineBreakModel


QQ20141213-4.png

3、设置height的priory


QQ20141213-5.png

小技巧介绍完毕,来看下sb里的约束情况:


QQ20141213-3.png

都是简单的固定高度,和根据parentView约束宽度。

那么先来看看效果吧:


Screen Shot 2014-12-13 at 11.15.48.png

纳尼?imageview的宽度明明是根据scrollview的宽度来约束的,为何scrollview的contentsize还是跟sb里预设的一样?

为了找出原因,我们使用sizeClass查看一下窄屏时候的情况。


QQ20141213-6.png

what a fuck!这玩意压根没有变嘛!有人可能会说你不是固定了imageview的宽度吗?是的,但是一般情况下,宽度的约束优先级是小于leading和trailing的约束的,即只要父view的宽度一定,子view的leading和trailing设置了约束,无论你width是多少,子view的宽度都已经确定了。(这是我个人的理解,说的不对的地方请大神指导)同时可以看看我并没有设置宽度的label。

QQ20141213-7.png

还是跟原来一样对不对。后来我查阅资料得知,scrollview里的子view,上下左右的约束对应的并不是scrollview的边,而是scrollview的contentSize的边。那么如何指定contentSize的宽度,让它只能上下滚动呢?

脑洞开一下。contentSize的宽度取决于子view的宽度,子view的宽度同时又跟scrollview的宽度有关,那么我再用一个contentView将所有子view都包裹起来,同时设置上下左右到scrollview的距离都为0,并且设置contentView和scrollview的宽度相等,如下图所示。

QQ20141213-8.png

还有其他步骤吗?没有了,是不是很简单?sb改动了这么多而代码却一句都没有改,这就是autolayout的魅力。

最后让我们来看下效果:

Screen Shot 2014-12-13 at 10.57.52.png

搞定收工!scrollview的autolayout这个坑我已经爬了半年了,没有办法的时候一直使用tableview的hearderview来代替,直到@叶孤城__大神教会了我@property (nonatomic , weak) IBOutlet NSLayoutConstraint *imageHeight;这一招。
希望这篇文章对还在爬坑的小伙伴有所帮助,弯路虽然能够帮助我们增长经验和见识,但是青春毕竟是不等人的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容