iOS开发技巧-UIImageView 的contentMode属性说明和使用

2023-05-16

contentMode这个属性是用来设置图片的显示方式,如居中、居右,是否缩放等。
苹果api里面的说明

typedef NS_ENUM(NSInteger, UIViewContentMode) 
{
    UIViewContentModeScaleToFill,

    UIViewContentModeScaleAspectFit,     
 // contents scaled to fit with fixed aspect. remainder is transparent

    UIViewContentModeScaleAspectFill,     
// contents scaled to fill with fixed aspect. some portion of content may be clipped.

    UIViewContentModeRedraw,             
 // redraw on bounds change (calls -setNeedsDisplay)

    UIViewContentModeCenter,              
// contents remain same size. positioned adjusted.

    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
};

测试代码

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view addSubview:self.picIMV];
    CGFloat x,y,w,h;
    x = 100;
    y = 100;
    w = 200;
    h = 200;
    CGRect r_rect = (CGRect){x,y,w,h};
    self.picIMV.frame = r_rect;
    self.picIMV.image = [UIImage imageNamed:@"yui01.jpeg"];
    self.picIMV.center = self.view.center;
}

- (UIImageView *)picIMV
{
    if (!_picIMV)
    {
        _picIMV = [[UIImageView alloc]init];
        _picIMV.contentMode = UIViewContentModeScaleAspectFill;
        _picIMV.backgroundColor = [UIColor redColor];
    }
    return _picIMV;
}

没有带Scale的,当图片尺寸超过 ImageView尺寸时,只有部分显示在ImageView中。
UIViewContentModeScaleToFill 属性会导致图片变形
UIViewContentModeScaleAspectFit 会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白。
UIViewContentModeScaleAspectFill也会证图片比例不变,但是是填充整个ImageView的,可能只有部分图片显示出来。

UIViewContentModeScaleToFill例子:
图片是变形了的,和ImageView比例不同
UIViewContentModeScaleToFill效果.png

UIViewContentModeScaleAspectFit例子:
红色是ImageView的背景颜色,比例和图比例不同,导致出现ImageView空白

UIViewContentModeScaleAspectFit效果图.png

UIViewContentModeScaleAspectFill例子:
图片超出了ImageView的范围
UIViewContentModeScaleAspectFill效果.png

设置clipsToBounds = YES 后,会裁剪掉超出ImageView的范围的图片
clipsToBounds设置YES.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发技巧-UIImageView 的contentMode属性说明和使用 的相关文章

  • Copilot 简单测评

    年初的时候通过了Copilot的试用申请资格 xff0c 试用到现在也几个月了 xff0c 说一下使用的感受 最开始理解Copilot xff0c 是通过注释来生成代码 xff0c 在这个想法下 xff0c 感觉自己又又又又要失业了 xff
  • iPhone开发【十四】多线程开发之NSThread——子线程模拟耗时操作

    转载请注明出处 xff0c 原文网址 xff1a http blog csdn net m changgong article details 8213964 作者 xff1a 张燕广 实现的功能 xff1a 1 xff09 演示多线程开发
  • 学习c语言的总结

    学习时间 xff1a 早上9点 晚上9点 学习内容 xff1a 利用c语言对 的代码学习 xff0c 并根据自己的理解编写代码 xff0c 最后整合学习的代码和自己理解的代码 xff0c 编写出更优的代码 学习体会 xff1a 对一个问题举
  • Makefile使用细节

    变量及通配符 A 61 C 即时变量 xff0c 此时C未定义 xff0c A为空 B 61 C 延时变量 xff0c 用到B时再确定具体的值 C 61 abc C 61 123 C不是第一次定义 xff0c 被忽略 C 43 61 789
  • Debian修改桌面系统

    今天 xff0c 装了Debian xff0c 发现其桌面不好看 xff0c 感觉就像瘟逗死系统 xff0c 寻思着更换一下 xff0c 于是就度娘 xff0c 但遗憾的是没有找到 xff0c 想一下不如自个儿研究哈哈 xff0c 所以记录
  • csp 序列查询新解 解决70分超时和错误的思路

    这个题的代码我再也不会看的 因为这题就是一个发现数与数之间联系的一道题 xff0c 不会再看了 总结一下 xff1a 这道题别人AC是用了两层for循环 但内层的for里第三个条件不是i 43 43 是i 43 61 一个区间长度 这就过了
  • bat批处理文件建立和打开

    一 新建bat文件 1 1新建文本文件 xff0c 在文本文件写入如下内容 xff1a xff08 注意不要有中文路径和中文名称 xff09 格式 xff1a start 目录路径 app exe 具体的实例如下所示 xff1a start
  • 安装树莓派vnc或者xrdp出错解决办法(树莓派ping不同Windows、但是Windows可以ping通树莓派)(树莓派上搭建好了vnc环境和xrdp环境)

    1 1出现问题 博主按照这篇教程https blog csdn net naibozhuan3744 article details 84961041搭建树莓派vnc环境或者xrdp环境时 xff0c 一直出现win10系统ping不通树莓
  • C++可变参数模板函数基本用法

    可变参数模板可以创建任意个参数的模板函数和模板类 xff0c 本文主要介绍可变参数模板函数 1 1可变参数模板函数声明和定义 template lt typename Args gt Args是一个模板参数包 void Show Args
  • python+KLT光流法匹配

    span class token comment 光立法匹配 span span class token function import span numpy as np span class token function import s
  • python3 最长公共前缀

    给定一个大小为 n 的字符串数组 strs xff0c 其中包含n个字符串 编写一个函数来查找字符串数组中的最长公共前缀 xff0c 返回这个公共前缀 import random import re class Solution def l
  • Android Studio 设置阿里云镜像代理(如果设置之后还是远程仓库下载失败,请仔细阅读其内容就可以解决了)

    1 在project的build gradle文件的repositories标签和allprojects标签的repositories标签下加入以下阿里云镜像代理 xff08 如下图一和图二 xff0c 记得要把阿里云镜像代理放在repos
  • scnprintf()和snprintf()、vscnprintf()和vsnprintf()

    写过Linux驱动或者内核态程序的人应该都知道 xff0c 编译时会有这样一个警告 xff1a use scnprintf instead of snprintf 为什么在编译驱动或者内核态程序的时候会有这个警告呢 xff1f 据说因为sn
  • CentOS 8.5安装-解决Error setting up base repository问题

    CentOS 8 5安装 解决Error setting up base repository CentOS 8简介 1 CentOS 8 版本介绍CentOS 8 的新特性CentOS 8所需硬件配置 CentOS 8 5安装CentOS
  • stdout, stdin, stderr的区别

    stdin stdout stderr的中文名字分别是标准输入 xff0c 标准输出和标准错误 当一个用户进程被创建的时候 xff0c 系统会自动为该进程创建三个数据流 xff0c 一个程序要运行 xff0c 需要有输入 输出 xff0c
  • Linux服务器安全之禁止root用户通过ssh登录(基于CentOS 7.0系统)

    Linux系统默认情况下 xff0c 是可以通过ssh以root权限登录的 但出于安全考虑 xff0c 这样的权限是不合适的 xff0c 因为黑客可能通过暴力破解你的root密码 xff0c 然后进入你的系统 为了保证服务器安全 xff0c
  • Linux的磁盘配额设置

    不管磁盘空间有多么大 xff0c 磁盘空间不够使用似乎是一个永远的事实 而且Linux系统在默认情况下 xff0c 并不限制每个用户使用磁盘空间的大小 xff0c 如果某个用户疏忽或恶意将磁盘占满 xff0c 将导致系统无法进行写操作甚至崩
  • pytorch Linux环境安装与使用(CPU 与GPU版本)

    假定系统已经安装好了Anaconda并配置了python环境 xff0c pytorch的安装只需要去pytorch的官方网站查看对应的命令输入即可 pytorch的官网可点击这里 对于Linux系统CPU版本可以使用以下conda或者pi
  • 让cp 和mv命令带进度条

    Linux系统自带的cp和mv命令无法显示操作进度 xff0c 如果拷贝或者移动的文件比较大的时候 xff0c 有进度条更方便我们了解操作进度 这里介绍使用Advanced Copy补丁来使cp和mv命令带进度条的方法 下载coreutil
  • Linux Vim插件管理器Vundle安装和使用

    Vundle是vim的一个插件管理器 xff0c 同时它本身也是vim的一个插件 插件管理器用于方便 快速的安装 删除 Vim更新插件 vim Vundle插件官方地址 xff1a https github com VundleVim Vu

随机推荐