• UIImageView的图片居中问题


    我们都知道在ios中,每一个UIImageView都有他的frame大小,但是如果图片的大小和这个frame的大小不符合的时候会怎么样呢?在默认情况,图片会被压缩或者拉伸以填满整个区域。

    通过查看UIView的属性可以知道,view的contentMode属性可以用来控制图片的显示情况。下面的设置可以让图片进行居中显示。

    1. imageView.contentMode =  UIViewContentModeCenter;  

    这个居中是包括了,横向和纵向都是居中。图片不会拉伸或者压缩,就是按照imageView的frame和图片的大小来居中显示的。

    这里有两种情况:

    1、图片比view的区域更大。这个时候会截取图片的中间部位显示在frame区域里面。

    2、图片比view的区域更小。这个时候图片会完整的显示在frame的中间位置。

    如果在默认情况,图片的多出来的部分还是会显示屏幕上。如果不希望超过frame的区域显示在屏幕上要设置。clipsToBounds属性。

    1. imageView.clipsToBounds  = YES;  

    最后一个问题,在iphone的retina屏幕上面,必须要设置,contentScaleFactor属性。这个属性的默认值是1。二对应的retina屏幕需要是2.可以通过下面的方式来设置:

    1. [imageView setContentScaleFactor:[[UIScreen mainScreen] scale]];  

    但是用:

    1. imageView.contentMode =  UIViewContentModeCenter;  

    也有他的问题,就是在图片不规则的时候,而且图片的宽或者高比frame的宽高更小的时候,会出现空白的情况。

    为了解决这种问题可以设置:

    1. imageView.contentMode =  UIViewContentModeScaleAspectFill;  

    这样图片会拉伸或者压缩以适应frame的边界,而且是适应更小的边,这样可以达成的效果是,图片适应最小的边铺开显示,更大的边会超出frame,如果设置了clipsToBounds属性为YES,那么更大的边就会被截断。这样达成更好的居中显示效果,完整的代码如下:

    1. UIImage *pic = [ UIImage imageNamed:@"IMG_0404.PNG"];  
    2. UIImageView *imageView   = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 240, 100 )];  
    3. [imageView setImage:pic];  
    4. [imageView setContentScaleFactor:[[UIScreen mainScreen] scale]];  
    5. imageView.contentMode =  UIViewContentModeScaleAspectFill;  
    6. imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight;  
    7. imageView.clipsToBounds  = YES;  

     原文链接地址:http://www.ganlvji.com/?p=139

  • 相关阅读:
    5-1 Leetcode中和链表相关的问题
    4-7 带有尾指针的链表:使用链表实现队列
    4.6 使用链表实现栈
    4.5 链表元素的删除
    4.4 链表的遍历、查询和修改
    4.3 为链表设置虚拟头结点dummyhead
    4.2在链表中添加元素
    4.1链表
    mybatis 力量操作参数为List的非空校验
    linux 运行和停止jar的shell 脚本
  • 原文地址:https://www.cnblogs.com/BinZone/p/4022218.html
Copyright © 2020-2023  润新知