关于UIImageView的显示问题

简介: <div id="article_content" class="article_content" style="margin:35px 0px; font-size:15px; color:rgb(85,85,85); line-height:35px; font-family:'microsoft yahei'"> <h1 class="entry-title" style="mar

关于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;
目录
相关文章
|
自然语言处理 算法 小程序
|
存储
RAID与LVM
RAID与LVM
516 1
视频结构化——原子能力解析
视频结构化是指对视频数据进行结构化处理,通过对原视频进行智能分析,提取出视频中的关键信息,以标签文本的形式进行描述。
817 0
视频结构化——原子能力解析
|
数据库
使用Mybatis-Plus实现对象属性自动填充功能
使用Mybatis-Plus实现对象属性自动填充功能
777 0
|
关系型数据库 MySQL C++
MySQL InnoDB inno_space 工具介绍
**什么是inno_space?** [inno_space ](./https://github.com/baotiao/inno_space) 是一个可以直接访问InnoDB 内部文件的命令行工具, 可以打印出文件的内部结构. Jeremy Cole 用ruby 写了一个类似的工具, 不过不支持MySQL 8.0, 并且ruby 编译以及改动起来特别麻烦, 所以用cpp 重写了一个.
622 0
MySQL InnoDB inno_space 工具介绍
|
存储 关系型数据库 MySQL
FastAPI第四天---数据库与模块化管理
FastAPI第四天---数据库与模块化管理
468 0
FastAPI第四天---数据库与模块化管理
|
运维 安全 Linux
iBox-面向Flutter的一站式研发工作台
移动端开发领域面向发布和运维的 Web 版平台有很多,但是面向研发和调试以及把整个研发工作流串联起来的平台确很少,面对端上越来越多的技术栈以及越来越复杂的业务场景,团队的上手成本和协同成本也会大大提高,iBox 的初衷就是想解决这些问题,它也是 Flutter Desktop 技术在生产环境的一次尝试。
1536 1
|
Java 大数据 网络安全
ARM+麒麟大数据环境搭建:基础环境+JDK
ARM+麒麟大数据环境搭建:基础环境+JDK
1223 0
ARM+麒麟大数据环境搭建:基础环境+JDK
|
弹性计算 网络协议 物联网
阿里云域名查询、域名注册、域名实名认证和域名备案全过程
阿里云域名查询、域名注册、域名实名认证和域名备案全过程
|
存储 机器学习/深度学习 缓存
双11专栏 | EdgeRec:电商信息流的端上推荐系统
本文将介绍在我们电商首页部署的端上推荐系统EdgeRec,以及在端上推荐系统中的算法实践。
双11专栏 | EdgeRec:电商信息流的端上推荐系统