首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UIView框架视图和CGRect在第一次调用时不起作用

是因为在第一次调用时,视图还没有被正确地布局和渲染。UIView是iOS开发中用于构建用户界面的基本组件,而CGRect是一个结构体,用于表示视图的位置和大小。

当我们创建一个UIView对象并设置其frame属性时,实际的布局和渲染是在视图被添加到视图层级中后才会发生的。在第一次调用时,视图可能还没有被添加到父视图中,或者父视图的布局还没有完成,因此设置的frame属性不会立即生效。

为了确保UIView框架视图和CGRect在第一次调用时能够起作用,我们可以采取以下措施:

  1. 确保视图已经被添加到父视图中:在设置frame属性之前,确保视图已经被添加到其父视图中。可以使用父视图的addSubview方法将视图添加到父视图中。
  2. 确保父视图的布局已经完成:在设置frame属性之前,确保父视图的布局已经完成。可以使用父视图的layoutIfNeeded方法来强制立即进行布局。
  3. 使用Auto Layout进行布局:Auto Layout是iOS中一种强大的布局系统,可以自动处理视图的位置和大小。通过使用Auto Layout,我们可以在视图被添加到视图层级之前就定义好其约束条件,从而确保视图在第一次调用时能够正确地布局和渲染。

总结起来,当UIView框架视图和CGRect在第一次调用时不起作用时,我们需要确保视图已经被添加到父视图中,并且父视图的布局已经完成。此外,使用Auto Layout可以更好地处理视图的布局和渲染。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

谈谈对drawRect的理解

写在前面 UIView对于iOS开发来讲,再熟悉不过了。也正是因为这一点,我们可能会忽略UIView一些特有方法的理解使用。今天,笔者主要整理一下对drawRect方法的理解使用。...默认情况下,该方法视图加载过程中不做任何人处理。当子类使用Core GraphicsUIKit绘制视图内容时就需要在该方法中添加绘制的代码。...该方法定义UIView(UIViewRendering)分类里面,望文生义,该方法完成视图的绘制。...重绘作用:重写该方法以实现自定义的绘制内容 drawRect调用场景 视图第一次显示的时候会调用。...; - (void)setNeedsDisplayInRect:(CGRect)rect;:标记为需要局部重绘,具体调用时机同上; drawRect使用注意事项 如果子类直接继承自UIView,则在drawRect

1.7K20
  • iOS学习——UIView的研究

    iOS学习——iOS 整体框架及类继承框架图中列出了iOS中所有类的继承框架图,其中下面这张图就是iOS开发中的界面相关类的继承框架图。 ?...)两个view间的转换 UIView的主要方法属性的定义 类方法 2个 初始化方法 2个 属性 8个 UIView的各类扩展 视图几何相关的扩展 UIView (UIViewGeometry),...主要定义了视图上位置区域相关一些属性方法 视图层次结构相关的扩展 UIView (UIViewHierarchy),主要定义对子视图的增删改以及层次结构调整等操作 视图外观渲染相关的扩展 UIView...)  ,主要提供添加、移除手势开始前回3个方法 视图上运动效果相关的扩展 UIView (UIViewMotionEffects),主要提供添加移除运动效果两个方法,还提供一个获取视图上所有运动效果的属性...fromView:(nullable UIView *)view; 217 /** 将rect由rect所在视图转换到目标视图view中,返回目标视图view中的rect */ 218 - (CGRect

    2.7K80

    IOS开发系列——UIView专题之五:常用开发技巧篇

    ,直到有子视图返回非空对象或者全部子视图遍历完毕; •若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束; •如所有子视图都返回非,则hitTest:withEvent...如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图视图之外区域的触摸操作不会被识别...view中,返回目标视图view中的像素值 •- (CGPoint)convertPoint:(CGPoint)pointtoView:(UIView*)view; •//将像素point从view...所在视图转换到目标视图view中,返回目标视图view中的rect •- (CGRect)convertRect:(CGRect)recttoView:(UIView*)view; •//将rect...从view中转换到当前视图中,返回在当前视图中的rect •- (CGRect)convertRect:(CGRect)rectfromView:(UIView*)view; 例把UITableViewCell

    1.1K20

    iOS动画-CALayer基础知识

    6.中心点(position)与锚点(anchorPoint) 7.视图与图层的坐标系 一、理解视图与图层 UIView我们都非常熟悉, 但它其实是对于CALayer的一层封装,我们创建UIView...图层与视图的底层关系.png UIView、UIColor、UIImage都定义于UIKit框架中; CALayer定义QuartzCore框架中的CoreAnimation中; CGImageRef...、CGColorRef两种数据类型是定义Core Graphics框架中; QuartzCore框架CoreGraphics框架可以跨平台使用,iOSMac OS上都能使用 ,但是UIKit却只能在...contentsRect (CGRect) 允许图层边框里显示寄宿图的一个子域 contentCenter (CGRect) 定义一个固定的边框一个图层上可拉伸的区域 三、UIView方法绘制自定义寄宿图...frame&&bounds.png 上图对原有视图做了旋转变换,之后的frame实际上代表了覆盖图层旋转之后的整个轴对齐的矩形区域,此时frame的宽和高bounds不再一致了。

    1.9K50

    iOS 仿支付宝银行卡界面(支持SwiftOC)

    钱包视图中实现添加卡片方法 钱包视图中实现卡片展示隐藏回方法 创建卡片视图ColoredCardView继承于CardView CardView中实现点击手势展示隐藏卡片 导入项目使用介绍...初始化WalletView并加载钱包头部视图walletHeader 需要加载钱包的地方初始化WalletView,并自定义头部视图walletHeader卡片视图,Demo 中以ViewController...钱包视图中重新加载卡片视图 钱包视图中重新加载卡片视图,在这里为了灵活修改方便使用,页面布局可以自定义,Demo中模仿支付宝页面进行设计,CardView视图中,主要实现页面的交互等功能,具体的UI...钱包视图中实现卡片展示隐藏回方法 钱包视图中实现卡片展示隐藏回方法,展示状态下,需要隐藏掉添加卡片按钮,禁止继续添加卡片,并且显示卡片详细设置内容删除按钮。...// 卡片视图 @objc var bankCardView: UIView!

    1.4K20

    iOS开发系列——纯代码实现iOS开发

    这里采用Xcode5.1),此时会发现已经没有ViewControllerstoryboard文件,我们需要手动创建一个视图控制器(项目中右键选择Objective-c class,默认继承自UIViewController...UIView就是指界面可见的控件元素,所有的控件最终都继承自UIViewUIView中还可以添加其他UIView(通过addSubView方法); 一个iOS应用中必须有一个主窗口UIWindow(...理论上也可以有多个UIWindow但是只有一个是主Window,而且只有主Window可以用户交互),UIWindow也是继承自UIView,它拥有UIView的所有属性、方法; UIWindow中必须有一个根控制器...); UIViewController是视图控制器,主要用来控制UIViewUIViewController内部有一个UIView(view属性); 在上面的代码中我们首先在应用程序加载完毕之后加载一个...当主窗口设置为可见过程中会调用视图控制器的loadView方法来加载视图(注意视图控制器的loadView方法是延迟加载的,第一次调用视图控制器的view属性才会调用此方法;由于makeKeyAndVisible

    3.5K60

    【IOS开发基础系列】UIView专题

    - (CGRect)convertRect:(CGRect)rect fromView:(UIView*)view 参数 rect     一个视图坐标系中的矩形 view     一个视图内部有矩形在他的坐标系中...- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view 参数 rect     一个接收者坐标系中的矩形 view     要转换过去的目标视图对象...UIView可以产生动画效果的变化包括:     • 位置变化:屏幕上移动视图。     • 大小变化:改变视图框架(frame)边界。     • 拉伸变化:改变视图内容的延展区域。     ...subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;     • 若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束;     ...view中,返回目标视图view中的rect - (CGRect)convertRect:(CGRect)rect toView:(UIView*)view; // 将rect从view中转换到当前视图

    59330

    iOS学习——tableview中带编辑功能的cell键盘弹出遮挡收起问题解决

    但是,如果我们的整体布局并不是只有一个UITableView,或者我们项目中需要用到MBProgressHUD框架时,我们可能就不能直接将我们的控制器设置成UITableViewController或其子类...,因为MBProgressHUD框架在UITableViewControllerUICollectionViewController中显示会存在一些bug,GitHub中的MBProgressHUD...框架官方文档中就有提到要避免将HUD添加到具有复杂视图层次结构的某些UIKit视图(如UITableView或UICollectionView),UITableViewControllerUICollectionViewController...cell我们的项目开发包中经常要用到,所以我们就需要对这类cell进行封装自定义。...那么,首先我们需要对对应的通知进行注册,然后设置监听到对应的通知之后应该采取的行动措施。

    3.9K80

    编码篇-iOS开发中的奇巧小伎

    7.统一收起键盘 8.导入自定义字体库 9.动态方法的动态执行 10.isKindOfClassisMemberOfClass的区别 11.Label字体大小 12.为UIView某个角添加圆角 13....将一个view放置在其兄弟视图的最上面、最下面 14.让手机震动一下 15.摇一摇功能 16.修改UISegmentedControl的字体大小 17.获取一个view所属的控制器 18.UIImage...parentView bringSubviewToFront:yourView] 最下面 [parentView sendSubviewToBack:yourView] 14.让手机震动一下 需要导入框架...m文件重写下列方法 - (CGRect)textRectForBounds:(CGRect)bounds { CGRect paddedRect = UIEdgeInsetsInsetRect(bounds...有个属性叫做exclusiveTouch,设置为YES后,其响应事件会其他view互斥(有其他view事件响应的时候点击它不起作用) view.exclusiveTouch = YES; // 一个一个设置太麻烦了

    5.3K10

    动画分析步骤“三步曲”

    表1 6S下QQ图标移动效果:QQ图标x、y坐标随时间变化关系表 3.动画结束阶段 动画效果结束之后没有触发新的回事件,只是更新了当前登录按钮的最后位置,所以图片最终停留在视图层的中间位置。...动画实现的第二阶段第三阶段:动画进行阶段动画结束阶段 要想实现应用打开动画即展现的效果,需要在View视图整体展现之前完成动画实现的第二阶段第三阶段的设置(因为如果视图已经显示了才设置动画效果,那么会有动画不连贯的现象...4 UIView视图中常见动画的属性分析 我们第2节第3节主要依靠UIView下的frame属性来实现登录按钮从左到右的进入效果。那么UIView下的其他属性是不是也可以有类似的效果呢?...frame是CGRect类型,它是一个结构体,结构体中包含originsize两个属性。...3.Layer属性:圆角渐变、边框颜色、阴影、3D等高级动画效果 UIView视图显示的容器,负责内容显示事件响应。

    88210

    Quartz2D实战-画板工具

    Quartz2D的API来自于Core Graphics框架,数据类型函数基本都以CG作为前缀:CGContextRef、CGPathRef等。...实际开发中UIKit框架能够帮我们完成大部分UI,但是有些UI比较复杂,普通的UIView无法满足我们的开发需要,这是就可以利用Quartz2D技术画出我们想要的控件。...DrawRect: 首先我们需要知道,- (void)drawRect:(CGRect)rect方法是什么时候调用: ?...我们发现该方法是视图即将展示的时候调用的,在这个方法中可以获取到上下文,将试图绘制到View上,其实每一个View内部都有一个layer属性,这个方法中就可以了取得一个layer,所以我们绘制的东西其实是绘制到...)rect的调用时机: 当view第一次显示到屏幕上时(被加到UIWindow上显示出来) 调用view的setNeedsDisplay或者setNeedsDisplayInRect:时 图形上下文(Graphics

    43840

    weex-31-接入iOS完整步骤

    前面基础部分内容已将讲解的差不多了,接下来,我们讲解一下原生部分的重点内容 本节任务 学习如何配置项目中使用WeexSDK 第一步 通过xcode 项目文件中创建一个Podfile文件,写入下面的内容...WXImgLoaderDefaultImpl - (id)downloadImageWithURL:(NSString *)url imageFrame:(CGRect...(WXImgLoaderProtocol)];// 注册图片下载操作 以上就是基本的配置内容,接下来就是如何加载渲染js文件的内容 第六步 创建一个控制器(WeexViewController) 引入框架...这个很重要一定要设置 不然渲染的时候,可能会出现问题 第九步 当WeexSDKInstance创建将节点都创建完成完成后,触发下面的回 _instance.onCreate = ^(UIView...*view) {} 这个方法中我们应该做下面的事情 1.移除之前渲染的视图 2.添加回参数的视图对象到视图控制器的根视图上 _instance.onCreate = ^(UIView *view)

    72610

    setNeedsDisplay看我就懂!

    一、着手 我定义了一个UIView的子类,用于演示使用setNeedsDisplay,这个CircleView子类会在draw(_ rect: CGRect)方法内简单绘制一个圆,它有一个颜色属性,这是我们将要设置用来改变圆的颜色...一般来说,使用框架控件,当您设置属性(如显示标签或值)时,您将会使用该属性,这样会导致重新绘制控件,因为系统会实现对控件drawRect方法的调用。...而我们自定义了自己的UIView子类,所以我们需要处理影响显示的控件的更新。改变颜色的情况下,当然需要我们自己控制重新绘制。...根据上一篇文章setNeedsLayoutlayoutIfNeeded看我就懂,所以我们circleView.color = color之后添加了对setNeedsLayout或layoutIfNeeded...所以我们需要调用setNeedsDisplay,明确地告诉系统必须重新绘制,从而显示新的颜色 由此,我们需要考虑三个重要的原则: 1、iOS中,视图很明显会被缓存。

    1.3K60

    UIKit Dynamics:开始入门 —《Graphics & Animation系列一》

    当一起使用时,运动动态成为用户体验工具的重要组成部分,使您的交互栩栩如生。用户将通过看到它以自然,动态的方式回应他们的行为。...准备开始 ViewController.swift 添加如下代码viewDidLoad: let square = UIView(frame: CGRect(x: 100, y: 100,...将以下代码插入viewDidLoad中添加square的代码下面: let barrier = UIView(frame: CGRect(x: 0, y: 300, width: 130, height...viewDidLoad上添加两个属性: var square: UIView! var snap: UISnapBehavior! 这将跟踪方块视图,以便您可以从视图控制器的其他位置访问它。...viewDidLoad中,从square声明中删除let关键字,以便它使用新属性而不是局部变量: square = UIView(frame: CGRect(x: 100, y: 100, width

    1.9K30

    iOS学习——UIPickerView的实现年月选择器

    ,首先是用一个基类来布局我们选择器的整体布局,包括我们的选择器的标题,取消、确定按钮,蒙层等大框架的布局,然后是子类基类的基础上添加UIPickerView来实现选择器的基本功能以及数据加载显示。...二 基类布局   在上一部分说了,基类布局主要是对整体的架构进行布局,我们先看下有哪些内容,包括了背景蒙层视图、弹出视图(包含标题行(又包含取消按钮、确定按钮标题)、分割线选择器),子类中会进行一个整体的布局...中主要是对整体框架进行布局,我们的控件的位置都是通过绝对位置进行布局的,所以需要修改的话可以直接在对应的位置上进行修改,然后BaseView.h中的注释我们说过了,点击背景遮罩图层取消、确定按钮的点击事件实现效果在基类中都是空白的...对外暴露类方法也是避免使用者使用时需要创建对象,比较麻烦,也避免一些不必要的问题。...很类似,初始化的时候需要设置其数据代理视图代理(UIPickerViewDelegate,UIPickerViewDataSource),然后通过这两个代理进内容、行数、列数的控制。

    4.2K130

    iOS开发之多表视图滑动切换示例(仿头条客户端)

    Demo中对所需的组件进行的简单封装,封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可。   ...主要的技术点就是通过ScrollView的回,通过事件的响应来改变ScrollView的ContentOffset的值。中根据ContentOffset的值来计算红色指示器的偏移量。   ...,UITableViewDataSource,UITableViewDelegate> 2 ///@brife 整个视图的大小 3 @property (assign) CGRect mViewFrame...*slideView; 22 @end   2.初始化方法如下,调用初始化方法时需要传入SlideTabBarView的frame选项卡的个数,初始化函数会调用一系列的初始化方法对组件进行初始化,...:实例化表视图,并指定委托回

    3.7K60

    iOS中表视图(UITableView)使用详解

    id   delegate; 设置表示图的行高(默认为44) @property (nonatomic)CGFloat rowHeight;  设置分区的头视图高度视图高度...下面这两个属性上面相似,分别设置分区头视图视图的估计高度(7.0之后可用) @property (nonatomic)          CGFloat            estimatedSectionHeaderHeight...,所有行视图) - (CGRect)rectForSection:(NSInteger)section;  根据分区分别获取头视图,尾视图行的高度 - (CGRect)rectForHeaderInSection...设置tableView头视图 @property (nonatomic, retain) UIView *tableHeaderView;   设置tableView尾视图 @property (nonatomic...通过xib文件OC类获取注册头视图视图 - (void)registerNib:(UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString

    1.4K30
    领券