你的位置:首页 > 操作系统

[操作系统]sizeToFit的用法和用途


 最近有遇到过sizeToFit的方法,比较好奇,所以查了点资料

  在官方文档中

  - (void)sizeToFit;                      

   // calls sizeThatFits: with current view bounds and changes bounds size.  调用这个方法来改变当前view的大小(让大小自适应)

  

    现在我从网页上加载一张图片并使用sizeToFit方法

//给imageView设置图片

-(void)setImage{

    

    //从网页中获取图片的URL

    NSURL *url = [NSURL URLWithString:@"http://img.taopic.com/uploads/allimg/140403/240438-1404030TT089.jpg"];

    //根据url得到data

    NSData *data = [NSData dataWithContentsOfURL:url];

    //根据data得到图片

    UIImage *image = [UIImage imageWithData:data];

    //将image设置到imageView中

    self.imageView.image = image;

    //调用sizeTofit方法 得到适合当前view的尺寸

    [self.imageView sizeToFit];

    //手动设置frame

    //self.imageView.frame = CGRectMake(0, 0, 375, 667);

    

    NSLog(@"sizeToFit-----%@",NSStringFromCGRect(self.imageView.frame));

    

    //设置scrollView的滚动范围

    self.scrollView.contentSize = image.size;

    

}

此时打印imageView的大小

 

2016-05-28 22:33:39.401 测试sizeToFit[20263:1497379] sizeToFit-----{{0, 0}, {1000, 564}}

 

发现在我们并没有设置imageView的情况下 , imageView的大小正好等于图片的大小,所以可以说 sizeToFit 就是让当前的View根据子元素的大小来调整 他自己的大小(最合适的).

@interface UIView(UIViewGeometry)

因为是UIView的分类 所以UILabel中也可以调用这个方法来是UILable根据文字的大小来调整大小(同理其他的控件也是可以的);

虽然UIView和它的子控件都可以用 但是sizeToFit并不适合手动布局

所以我们一般在实际开发中并不怎么用 但是在一些系统自动布局的场合我们用sizeToFit就比较适合了

1.对navigationItem的设置,

2.对UIBarButtonItem的设置

3.UILabel中添加文字,然后让调整label的大小来适应文字,我们也调用sizeToFit的方法

4.等等

 

PS:关于从网页中加载图片一开始 有报错 查了资料才知道

iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输

 

所以我们需要在info.plist文件中添加一个属性

<key>NSAppTransportSecurity</key>

    <dict>

        <key>NSAllowsArbitraryLoads</key>

        <true/>

    </dict>