1. 程式人生 > >載入XIB繪製的頁面時的注意事項

載入XIB繪製的頁面時的注意事項

問題如下:

筆者為了省事,在開發某個頁面時是通過xib直接畫的頁面,然後在真機執行時為了讓該頁面適配不同機型所以在

xxx = [[[NSBundlemainBundle] loadNibNamed:@"xxx"owner:selfoptions:nil] firstObject];

之後設定xxx的frame,

xxx.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);

但是xxx頁面上有個控制元件需要設定半圓角,於是筆者在xxx類的.m裡面的 awakeFromNib方法做了如下操作

- (void)awakeFromNib {

    [super

awakeFromNib];

// Initialization code

//TODO:uiview 單邊圓角或者單邊框

UIBezierPath *maskPath = [UIBezierPathbezierPathWithRoundedRect:_alert_view.boundsbyRoundingCorners:(UIRectCornerBottomRight | UIRectCornerBottomLeft) cornerRadii:CGSizeMake(5,5)];//圓角大小

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];

    maskLayer.frame

= _alert_view.bounds;

    maskLayer.path = maskPath.CGPath;

    _alert_view.layer.mask = maskLayer;

//解決不同機型介面上還是頑固的顯示xib上的尺寸大小

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

self.translatesAutoresizingMaskIntoConstraints = YES;

}

備註:_alert_view設定了約束距離螢幕左右兩邊均為15

由於xib繪製頁面時螢幕寬度是5s的寬度,當該頁面在iPhoneX上執行時_alert_view

的尺寸大小變成了


究其原因是因為在xxx = [[[NSBundlemainBundleloadNibNamed:@"xxx"owner:selfoptions:nilfirstObject];時就執行了awakeFromNib該方法,由於設定半圓角程式碼

askLayer.frame = _alert_view.bounds;

maskLayer.path = maskPath.CGPath;

_alert_view.layer.mask = maskLayer;

的原因針對_alert_view改變了其frame,此時在設定

xxx.frame = CGRectMake(00kScreenWidthkScreenHeight);

想改變xxx的frame進而通過約束想改變_alert_view的frame已經無法生效,因此解決方法就是把設定半圓角的程式碼延遲執行

[selfperformSelector:@selector(layoutMyCorner) withObject:nilafterDelay:.0];

這樣在整個頁面載入完畢frame已經設定正確 在執行設定圓角的程式碼就可以解決上述問題




相關推薦

載入XIB繪製頁面注意事項

問題如下:筆者為了省事,在開發某個頁面時是通過xib直接畫的頁面,然後在真機執行時為了讓該頁面適配不同機型所以在xxx = [[[NSBundlemainBundle] loadNibNamed:@"xxx"owner:selfoptions:nil] firstObject

js 設定定時重新整理頁面注意事項

<script type="text/javascript"> function dtime(){ setInterval(sub, 120000);//2min一次 } function sub(){ document.getElementById("fr

Android Sqlite資料庫升級注意事項

在app版本升級時,同時升級了Sqlite資料庫的版本號的話,如果需要保留之前的資料,需要在onUpgrade方法中做處理。這裡記錄一下在onUpgrade處理升級的時候的一些注意事項。 先看下常用的SQLiteOpenHelper的方法: public class Database

.NET MVC和.NET WEB api混用注意事項

1、同時配置了mvc路由和api路由時,mvc路由無法訪問(呼叫所有mvc路由全部404錯誤) 在Global.asax中,需注意路由註冊的順序,將api路由註冊放在最後: 即將 void Application_Start(object sender, EventArgs e)

vue之watch監聽物件或者一個值注意事項(深度觀察deep:true慎用!)

vue中想在某個值改變的時候能夠做一些其他事情,可以使用其提供的監聽機制,使用watch。注意,本篇不講技術問題,只是講解如何應用,因為筆者也是一個前端的小白 例:經手專案中就有使用,截圖如下: 下面來分析上面分別是怎樣實現監聽的: 其實除了畫紅線的地方,別的都沒什

Vue做微商城spa頁面注意事項

Tips: (1)使用者註冊的許可權以及流程 (2)遊客的許可權 (3)支付頁面,分享頁面 為了微信sdk的使用 單獨獨立了專案外寫新的頁面(ios的瀏覽 會造成url的錯誤) (4)頁面一定注意元件的使用 每一個元件對應相應的單獨的功能 單獨的功能展示獨立出單

安裝windows和ubuntu雙系統,安裝ubuntu注意事項

1.允許安裝第三方軟體圖形、硬體以及是否聯網更新(可選也可不選) 2.引導驅動裝置應選全盤即/dev/sda即可------這是Ubuntu的grub2引導;如果將引導驅動裝置放入分好的/boot區,則是由Windows引導。 3.當更新windows或者Ubuntu時,造成開機無法進入即找不到引導

ovirt掛載多儲存環境注意事項

我的測試環境如下 default資料中心+default叢集+NFS儲存 default叢集有node1和node2 新建FC叢集,並加入node3,然後掛載fc儲存 node1和node2沒有hba卡,並未連線到儲存,隸屬於不同叢集,但還是會報錯,看來儲存在同一資料中心

使用Spring + quartz叢集持久化注意事項

1、持久化時未序列化異常 java.io.NotSerializableException: Unable to serialize JobDataMap for insertion into database because the value of property '

mybatis寫xml注意事項

mybatis寫xml時注意事項: 1. 如果資料庫欄位中有關鍵字,使用`關鍵字`,最好是隻要是欄位就用``符號,可以減少很多錯誤 2. 如果更新的欄位中有 時間戳,更新時,使用如下(加上jdbcType可以防止出錯): <if test="updateTime !=null"> &

[iOS 載入xib卡頓/慢/延]程式第一次啟動,載入xib檔案延3-5秒問題

遇到的問題: 在程式第一次啟動好以後, 第一次 無論是 push 或者 presentViewController 或者tabBar 切換檢視 (這裡的每個VIewController 都是由xib檔案構成) 都有一個情況出現, 就是在觸發這些方法以後,

JAVA中在main函式中呼叫變數注意事項

在下面這段程式碼中會報錯 [java] view plain copy print?System.out.println(s1);  System.out.println(s1);Cannot make a static reference to the non-static field s1 只要把

適配平板和手機端注意事項

在適配平板和手機佈局時,經常會建立幾種不同的佈局。完了執行時butterknife會報空指標,用死方法一個個抓到最後才指向 Caused by: java.lang.IllegalStateException: Required view 'ivGoodListStyle'

$.each key值相同注意事項

如果 key的值相同的話,會輸出後面的value值。 var trdate={"姓名":"張三","姓名":"李四","姓名":"王五","姓名":"趙六","姓名":"小七"};    var i=0;    $.each(trdate,function(key,valu

使用DecimalFormat注意事項

 DecimalFormat ff=new DecimalFormat("#,###,###.######");  綠色區域為保留的小數位數(四捨五入)----但不會保                                                                      

公開aidl介面給外部apk呼叫注意事項

當我們寫的一個service通過aidl公開介面給外部第三方應用時,通常的做法是會將aidl以及對應java檔案打成jar包,以供第三方的app使用。這樣做沒有任何問題,但要注意的是在後續升級這個介面的時候,得保持介面中方法順序不變,即只能在aidl的後面新增新方法,而不能

前端_頁面重構注意事項

頁面重構要注意一下幾點: 不濫用id,儘量用class代替id。CSS選擇器最好控制在2-3個以內,不要使用內聯樣式,轉移到樣式表中。根據上下結構命名id和class,而不是設計元素,避免html結構

struts2接收javabean物件注意事項

struts2在接收javabean物件的時候,action的中的屬性既要有get方法也要有set方法,不然只能接收到一個屬性。 示例如下: xtype: 'form', itemId : '

Go 多變數賦值注意事項

說到多變數賦值時,先計算所有相關值,然後再從左到右依次賦值,但是這個規則不適用於python我們來看一例: package main import "fmt" func main() { data, i := [3]string{"喬幫主","慕容復","鳩摩智"}, 0 i, data

載入帶有手勢識別器的XIB檔案注意事項

  首先新建一個繼承自UIView的類,並建立相應的XIB檔案 #import <UIKit/UIKit.h> @interface ZHDemoView : UIView + (instancetype)demoView; @end   提供一個類方法以供快速建立當