布局之extendedLayout与sizeToFit

某商场G区火灾自动报警与控制系统设计 某商场G区火灾自动报警与控制系统设计 摘要:随着我国经济建设的迅速发展,人民生活水平不断提高,城市用地日益紧张,促使建筑物正朝着高层化、密集化方向发展。高层建筑的特点决定其火灾的危险性和高层建筑的火灾自动报警系统的重要性,一套完整的火灾自动报警及联动控制系统是高层建筑发生火灾时人们生命财产的有利保障,是能否快速准确地发现火情,把火灾扑灭在萌芽状态的关键所在。文章通过消防设计,论述了火灾自动报警及消... 阅读详情

iOS 7以后在ViewController里面引进了一系列属性用于管理页面布局。
extendedLayout有几个相似的参数:

edgesForExtendedLayout
automaticallyAdjustsScrollViewInsets
extendedLayoutIncludesOpaqueBars

下面是Apple官方提供的文档解释,看过之后还是觉得太过于抽象,于是用代码来实验吧。
**edgesForExtendedLayout
**
The extended edges to use for the layout.
**automaticallyAdjustsScrollViewInsets
**
A Boolean value that indicates whether the view controller should automatically adjust its scroll view insets.

**extendedLayoutIncludesOpaqueBars
**
A Boolean value indicating whether or not the extended layout includes opaque bars.

edgesForExtendedLayout

新建单个页面的项目,然后加上UINavigationController

把背景设置成红色,界面效果如下:

所以可以看到在iOS7后,View的布局是默认全屏的,Navigation Bar默认是半透明的,于是在Navigation Bar下面可以看到红色的背景。

- (void)viewDidLoad {  
  [super viewDidLoad];
  self.edgesForExtendedLayout = UIRectEdgeNone;
}

将edgesForExtendedLayout设置成UIRectEdgeNone,表明View是不要扩展到整个屏幕的。页面效果如下:
 
UIRectEdge是个枚举类型,其他的值通过字面意思也是非常容易理解的。

typedef enum :  NSUInteger  {


UIRectEdgeNone   = 0,


UIRectEdgeTop    = 1 << 0,


UIRectEdgeLeft   = 1 << 1,


UIRectEdgeBottom = 1 << 2,


UIRectEdgeRight  = 1 << 3,


UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight

} UIRectEdge;

**automaticallyAdjustsScrollViewInsets
**
这个属性用于如果页面是ScrollView或者UITableView,通常我们希望ScrollView或者UITableView内容显示是在UINavigation Bar下面。
通过设置edgesForExtendedLayout = UIRectEdgeNone或者self.navigationController.navigationBar.translucent =NO;可以让view的布局从UINavigation Bar下面开始,不过一个副作用就是当页面滑动的时候,view是没有办法占据全屏的。
automaticallyAdjustsScrollViewInsets就可以很好的完成这个需求。

self.automaticallyAdjustsScrollViewInsets = NO;


这时UITableView会被UINavigation Bar遮挡住。

self.automaticallyAdjustsScrollViewInsets = YES;


这时可以看到UITableView的内容会从UINavigation Bar下面开始,并且这个页面的View还是占据整个屏幕的,所以这一个属性完全搞定!

extendedLayoutIncludesOpaqueBars
如果状态栏是不透明的,那么页面的布局默认是不会包含状态栏的,除非将这个属性设置成为YES。所以如果你的页面扩展到Navigation Bar (edgesForExtendedLayout=UIRectEdgeAll),要是这个属性设置成NO (default), 如果状态栏是不透明的话,页面是不会扩展到状态栏的。

在这篇文章http://redth.codes/ios7-full-screen-layout/ 里面提到有些时候automaticallyAdjustsScrollViewInsets并不能帮助我们正常计算ScrollView/TableView的Inset,这时候就自己设置咯。
self.myTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);


UIView的sizeToFit:和fitSize方法

文档说明:

- (CGSize)sizeThatFits:(CGSize)size; // return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (void)sizeToFit; // calls sizeThatFits: with current view bounds and changes bounds size.
  • (CGSize)sizeThatFits:(CGSize)size
    让View计算并返回subView最适合的大小
  • sizeToFit
    调整大小和移动使其子视图处于最佳位置

参考文章:
http://stackoverflow.com/questions/18798792/explaining-difference-between-automaticallyadjustsscrollviewinsets-extendedlayo
http://redth.codes/ios7-full-screen-layout/

以太网传输硬件设计大全 1.网线的介绍RJ45由插头和插做组成,也就是我们常说的网口和网线。RJ45 网线插头又称水晶头,共有八芯做成。RJ45网络传输线分为直通线、交叉线和全反线。直通线用于异种网络设备之间的互连,例如,计算机与交换机。交叉线用于同种网络设备之间的互连,例如,计算机与计算机。全反线用于超级终端与网络设备的控制物理接口之间的连接。下面将介绍一下各线的作用和区别。1.直通线:又叫正线或标准线,两端采用568B做线标准,注意两端都是同样的线序且一一对应。直通线是应用最广泛,现在最常用的线。 阅读详情

相关推荐

STM32F103+AX58100 EtherCAT从站SPI移植实战:CubeMX配置避坑指南

本文详细介绍了STM32F103与AX58100 EtherCAT从站控制器的SPI接口移植实战,重点解析CubeMX配置中的关键参数与常见陷阱。内容涵盖硬件连接规范、SPI模式设置、中断优先级规划及协议栈对接技巧,帮助开发者高效实现工业自动化领域的实时通信方案。特别强调CPOL/CPHA配置与AX58100的匹配要求,避免数据错位问题。

weixin_29230865的博客 331

Swift - edgesForExtendedLayout属性介绍(元素被导航栏遮挡问题)

原文:http://www.hangge.com/blog/cache/detail_1519.html 从 iOS7 开始,ViewController 便使用全屏布局。同时引入了一个新属性 edgesForExtendedLayout,本文来讲讲 edgesForExtendedLayout 这个属性。 一、edgesForExtendedLayout属性介绍 1,默认值

jesse881025的专栏 1407

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2147

与导航栏下控件的frame相关的edgesForExtendedLayout、translucent、extendedLayoutIncludesOpaqueBars、automaticallyAdj...

  在引入了导航控制器UINavigationController和分栏控制器UITabBarController之后,我们在设置控件的frame的时候就需要注意避开导航栏UINavigationBar 44+电源栏UIStatusBar 20的高度,和底部分栏UITabBar 44的高度。底部分栏并没有太多需要处理的,我们只需要在计算高度的时候避开这44就可以了。而导航栏因为包含透明/半透明、第...

weixin_30664615的博客 516

【hadoop编译报错】(yarn install) on project hadoop-yarn-applications-catalog-webapp Failed to run task

ambari+bigtop自定义组件集成

TTBIGDATA的博客 1803

UG二次开发避坑指南:如何正确配置Python环境让NXOpen脚本跑起来?

本文详细介绍了UG/NX二次开发中Python环境配置的全流程与NXOpen脚本调试技巧,帮助开发者避开常见陷阱。从NXOpen架构解析到Python解释器版本匹配,再到环境变量设置与路径问题处理,提供了一套经过验证的配置方案,确保脚本顺利运行。

weixin_33859135的博客 448

ios7之后的适配属性讲解edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars等

ios7版本之后,增加了很多新的属性,其中包括页面起始点从屏幕最左上角(0,0)点开始,这给页面适配带来了很大问题。首先说说纯代码页面: 1、edgesForExtendedLayout 这个属性我们字面上里面是四周延生,指定边缘要延伸的方向,IOS7鼓励全屏布局模式,默认值是UIRectEdgeAll。 没用过的人可能不知道这是什么意思,举例假如我们页面上面有导航了,这个时候页面起始点仍然从状态栏上方开始计算,举例子你一个视图要全屏显示就要设置成: CGRectMake(0, 64, SCREEN

u013712343的博客 944

提供一个微信投票刷票的js代码

最近几天,有个朋友找我去写一个脚本帮他 在微信上刷票、微信投票刷票,我大概看了一下,本次微信投票刷票其实就是根据微信的openid来限制,每个openid只能投三次票的限制。上图可以看出,其实只要openid,和toopenid即可,openid是自己的微信id,toopenid是投票对象的微信id,那我们定时修改openid即可给某一个人刷投票。把这段代码复制到浏览器F12之后的console里,直接回车即可开始微信投票刷票(刷新或关闭浏览器即可停止刷票)//生成随机的ip地址。

qq_858865388专业提供快速微信投票教程攻略和方法的博客 2万+

edgesForExtendedLayout

edgesForExtendedLayout

Sico2Sico 840

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5803

【报错解决】OpenClaw 报错 Unsupported engine: requires node >=22.0.0 —— Node.js 版本过低的完整排查与解决实录

在国产操作系统环境下部署OpenClaw时遇到"Unsupported engine: requires node >=22.0.0"报错,分析表明该工具要求Node.js 22+以支持fetch API等新特性。解决方案包括:1) 使用nvm升级Node至22+版本;2) Docker环境中改用node:22-alpine镜像;3) 不推荐强制忽略引擎检查。文章强调遵循引擎要求的重要性,指出环境版本是工程化体系稳定运行的关键,建议通过规范升级解决兼容性问题。(149字)

博客 608

状态栏的edgesForExtendLayout属性

edgesForExtendLayout是iOS7之后一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向,它的默认值是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。 self.edgesForExtendedLayout = UIRectEdgeNone; 上面的代码用来解决

Miss懵的博客 723

基于深度学习的火焰检测系统:YOLOv8 + UI界面 + 数据集详解

YOLO(You Only Look Once)是一种端到端的目标检测算法,其最大优势在于将目标检测任务转化为一个回归问题,可以在一次前向传播中同时完成目标定位和分类。YOLOv8是YOLO系列中的最新版本,相比之前的版本,YOLOv8在精度和推理速度上都做了显著提升,特别是在小物体检测方面表现更加优秀。实时性:YOLOv8具有较高的推理速度,适用于实时火焰检测。高精度:相较于YOLOv7,YOLOv8在精度和小物体检测上有所改进。简单易用:YOLOv8的API简单直观,易于集成和使用。

YOLO 660

edgesForExtendedLayout属性

全屏布局属性,默认UIRectEdgeAll。即使包含NavigationBar、TaBar,self.view仍会延伸覆盖到四周的区域,有时间出现内容被NavigationBar、TaBar遮挡的情况。

小A的博客 229

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

浅析extendedLayout, automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars

参考文章: http://stackoverflow.com/questions/18798792/explaining-difference-between-automaticallyadjustsscrollviewinsets-extendedlayo http://redth.codes/ios7-full-screen-layout/ iOS 7以后在ViewControll...

weixin_30387339的博客 168

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

edgesForExtendedLayout浅淡

从iOS7开始,view controllers默认使用全屏布局(full-screen layout)。同时引进了不少属性,使你能更自由地控制view controllers如何布局views。这些属性是: edgesForExtendedLayout 通过设置此属性,你可以指定view的边(上、下、左、右)延伸到整个屏幕。 typedef enum : NSUInteger { UIRe

我的专栏 398

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets属性见解

iOS7之后的版本,viewController为全屏布局,坐标系起点为屏幕的左上角,这些属性会对坐标系的起点有影响

ck_fear的专栏 434

UIViewController的edgesForExtendedLayout属性

UIViewController的edgesForExtendedLayout属性 其实,在iOS 7中,UIViewController引入了一个新的属性:edgesForExtendedLayout。 这个属性的默认值是UIRectEdgeAll。 想必大家都遇到一种情况,明明y坐标设置的是0,但是总是被讨厌的导航栏给遮住。比如下面这个情况: UILabe

YLGWHYH的专栏 1902

UIViewController中的edgesForExtendedLayout和extendedLayoutIncludesOpaqueBars属性

今天在用tableView时遇到了一个奇葩问题:不能显示最后一行。在用手势向上拉起时能看到最后一行,但松手之后最后一行就看不到了。(可能没明白我的意思,还是上图比较直接) 用手放在屏幕往上拉,能看到最后一行和后面的空行: 松手以后,最后“寒”那行就看不见了 代码如下- (void)viewDidLoad { [super viewDidLoad]; self.mT

mzuestc的专栏 2051

layoutSubviews、drawRect、edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets

首先两个方法(layoutSubviews、drawRect)都是异步执行。layoutSubviews方便数据计算,drawRect方便视图重绘。   layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews。 2、addSubview会触发layoutSubviews。 3、设置view的Frame会触发layoutSubvi

雅文威的博客 450

edgesForExtendedLayout指定边缘要延伸的方向

在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局 就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEdge的属性, 指定边缘要延伸的方向,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说, 如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖

thanklife的专栏 503

iOS7 edgesForExtendedLayout&automaticallyAdjustsScrollViewInsets

一、edgesForExtendedLayoutedgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向。因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。默认的布局将从navigation bar的

xiaoxiaobukuang的专栏 1003

设置edgesForExtendedLayout属性时引发的导航栏背景颜色偏差问题

最近项目要将导航栏背景色由橙黄色换成纯白色,以为改一句代码就能解决的事: self.navigationController?.navigationBar.barTintColor = UIColor.fwNavigationBarColor 谁知道设置完后,有部分控制器的导航栏背景色出现了问题,不是纯白色,而是看起来想白色和黑色的混合色,后来发现这些控制器都有一个共同点: self....

chokshen的博客 1500

edgesForExtendedLayout 和automaticallyAdjustsScrollViewInsets属性

self.edgesForExtendedLayout=UIRectEdgeAll;UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域,即表示tableView可延伸到 navigationBar 下面,从导航栏的顶部边缘(0,0)开始,如图: 默认是self.edgesForExtendedLayou

ideas press的专栏 2024

self.edgesForExtendedLayout = UIRectEdgeNone;

1.self.edgesForExtendedLayout = UIRectEdgeNone;属性edgesForExtendedLayout,意思大概是边缘向四周展开edgesForExtendedLayout 值是结构体,默认值是 UIRectEdgeAll,也就是说,当一个控制器要往父控制器添加的时候,上下左右填充满整个屏幕。例如1:UIViewController添加到uiNavContro

BlingbringBling的博客 2800

iOS中layout方法布局大解析

在iOS的UI层,有大量的以layout开头的方法,这里简单的总结一下每个layout的用法和时机 - (CGSize)sizeThatFits:(CGSize)size - (void)sizeToFit - (void)layoutSubviews - (void)layoutIfNeeded - (void)setNeedsLayout - (void)setNeedsDispl...

ningn111的博客 2768
上一篇: iOS开发之CocoaPods使用
下一篇: iOS开发之UILabel(富文本)
SuAdrenine
博客等级 码龄11年 6粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值