pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

viewWillAppear: 和 viewDidAppear: 之間的視圖框架變化

View frame changes between viewWillAppear: and viewDidAppear:(viewWillAppear: 和 viewDidAppear: 之間的視圖框架變化)
本文介紹了viewWillAppear: 和 viewDidAppear: 之間的視圖框架變化的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我在我的應(yīng)用程序中發(fā)現(xiàn)了一個(gè)奇怪的行為,其中連接的 IBOutlet 在我的視圖控制器中對(duì) viewWillAppear: 的調(diào)用之間具有其連接的視圖框架viewDidAppear:.這是我的 UIViewController 子類中的相關(guān)代碼:

I have discovered a strange behavior in my application, where a connected IBOutlet has its connected view's frame between the calls in my view controller to viewWillAppear: and viewDidAppear:. Here is the relevant code in my UIViewController subclass:

-(void)viewWillAppear:(BOOL)animated {
    NSLog(@"%@", self.scrollView);
}

-(void)viewDidAppear:(BOOL)animated {
    NSLog(@"%@", self.scrollView);
}

以及生成的日志輸出:

MyApp[61880:c07] <UIScrollView: 0x1057eff0; frame = (0 0; 0 0); clipsToBounds = YES; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x10580100>; layer = <CALayer: 0x1057f210>; contentOffset: {0, 0}>
MyApp[61880:c07] <UIScrollView: 0x1057eff0; frame = (0 44; 320 416); clipsToBounds = YES; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x10580100>; layer = <CALayer: 0x1057f210>; contentOffset: {0, 0}>

這清楚地表明框架在兩次調(diào)用之間發(fā)生了變化.我想在 viewDidLoad 方法中對(duì)視圖進(jìn)行設(shè)置,但如果內(nèi)容在屏幕上之前無(wú)法更改,那似乎毫無(wú)用處.會(huì)發(fā)生什么?

Which clearly shows that the frame is changing between the two calls. I wanted to do setup with the view in the viewDidLoad method, but if the content is not available for me to change until it is on the screen, that seems pretty useless. What could be happening?

推薦答案

Autolayout 對(duì)我們?cè)O(shè)計(jì)和開(kāi)發(fā)視圖 GUI 的方式進(jìn)行了巨大改變.主要區(qū)別之一是 autolayout 不會(huì)立即更改我們的視圖大小,而是僅在觸發(fā)時(shí),即在特定時(shí)間,但我們可以強(qiáng)制它立即重新計(jì)算我們的約束或標(biāo)記它們作為布局的需要".它的工作方式類似于 -setNeedDisplay.
對(duì)我來(lái)說(shuō)最大的挑戰(zhàn)是要理解并接受這一點(diǎn),我們不再需要使用自動(dòng)調(diào)整大小的蒙版,而框架在放置我們的視圖時(shí)已成為無(wú)用的屬性.我們不再需要考慮視圖位置,但我們應(yīng)該考慮我們希望如何在彼此相關(guān)的空間中看到它們.
當(dāng)我們想要混合舊的自動(dòng)調(diào)整大小蒙版和自動(dòng)布局時(shí),就會(huì)出現(xiàn)問(wèn)題.我們應(yīng)該盡快考慮自動(dòng)布局的實(shí)現(xiàn),并盡量避免在基于自動(dòng)布局的視圖層次結(jié)構(gòu)中混合舊方法.
擁有一個(gè)僅使用自動(dòng)調(diào)整大小掩碼的容器視圖是可以的,例如視圖控制器的主視圖,但如果我們不嘗試混合使用會(huì)更好.
我從未使用過(guò)故事板,但很可能它是正確的.使用自動(dòng)布局,您的視圖框架在自動(dòng)布局引擎開(kāi)始計(jì)算時(shí)設(shè)置.嘗試在視圖控制器的 - (void)viewDidLayoutSubviews 方法的 super 之后詢問(wèn)同樣的問(wèn)題.
當(dāng)自動(dòng)布局引擎完成計(jì)算視圖的幀時(shí)調(diào)用此方法.

Autolayout made a huge change in how we design and develop the GUI of our views. One of the main differences is that autolayout doesn't change our view sizes immediately, but only when is triggered, that means at a specific time, but we can force it to recalculate our constraints immediately or mark them as "in need" of layout. It works like -setNeedDisplay.
The big challenge for me was to understand and accept that, we do not need to use autoresizing masks anymore, and frame has become a useless property in placing our views. We do not need to think about view position anymore, but we should think how we want to see them in a space related to each other.
When we want to mix old autoresizing mask and autolayout is when problems arise. We should think about autolayout implementation really soon and try to avoid to mix the old approach in a view hierarchy based on autolayout.
Is fine to have a container view that uses only autoresizing masks, such as a main view of a view controller, but is better if we do not try to mix.
I never used storyboard, but most proably it is correct. Using Autolayout, frame of your views are set when the autolayout engine starts its calculation. Try to ask the same thing right after super of - (void)viewDidLayoutSubviews method of your view controller.
This method is called when the autolayout engine has finished to calculate your views' frames.

這篇關(guān)于viewWillAppear: 和 viewDidAppear: 之間的視圖框架變化的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How to subclass UIScrollView and make the delegate property private(如何繼承 UIScrollView 并使委托屬性私有)
Swift - how to get last taken 3 photos from photo library?(Swift - 如何從照片庫(kù)中獲取最后拍攝的 3 張照片?)
Setting contentOffset programmatically triggers scrollViewDidScroll(以編程方式設(shè)置 contentOffset 觸發(fā) scrollViewDidScroll)
Photos app-like gap between pages in UIScrollView with pagingEnabled(使用 pagingEnabled 的 UIScrollView 中頁(yè)面之間的照片應(yīng)用程序式間隙)
why UIScrollView is leaving space from top in ios 6 and ios 7(為什么 UIScrollView 在 ios 6 和 ios 7 中從頂部留下空間)
UIScrollView pauses NSTimer while scrolling(UIScrollView 在滾動(dòng)時(shí)暫停 NSTimer)
主站蜘蛛池模板: Pos机办理_个人商户免费POS机申请-拉卡拉办理网 | 宠物店加盟_宠物连锁店_开宠物店-【派多格宠物】 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 铣床|万能铣床|立式铣床|数控铣床|山东滕州万友机床有限公司 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 周口风机|周风风机|河南省周口通用风机厂 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 联系我们老街华纳娱乐公司官网19989979996(客服) | 智慧消防-消防物联网系统云平台| 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 南京蜂窝纸箱_南京木托盘_南京纸托盘-南京博恒包装有限公司 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 铁素体测量仪/检测仪/铁素体含量测试仪-苏州圣光仪器有限公司 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 商秀—企业短视频代运营_抖音企业号托管 |