發現在使用uitableview控制項時候,self.tableview.tableheaderview = self.viewheader;控制台列印大量的約束衝突,但是介面完好。
uiview *viewtemp = [[uiview alloc] initwithframe:cgrectmake(0, 0, screenwidth, heightuse)];
[viewtemp addsubview:self.viewheader];
[self.viewheader mas_makeconstraints:^(masconstraintmaker *make) ];
self.tableview.tableheaderview = viewtemp;
self.viewheader.frame = cgrectmake(0, 0, screenwidth, heightuse);
self.tableview.tableheaderview = self.viewheader;
self.tableview.tableheaderview一開始尺寸為0.後來設定self.tableview.tableheaderview = self.viewheader;導致runloop的乙個迴圈週期內self.tableview.tableheaderview的尺寸要進行變化。從0變化到self.viewheader的尺寸。
因為self.tableview.tableheaderview = self.viewheader;所以self.tableview.tableheaderview的尺寸變化就反應在了self.viewheader的尺寸變化上。也就是self.viewheader的尺寸從0變化到乙個設定的尺寸。
在self.viewheader的變化中,一開始尺寸為0。這時候我們的布局有可能會有衝突。其實我們布局時候很少甚至不會考慮最底部檢視布局尺寸為0,我們認為永遠不會為0,都在我們的掌控中,但是tableview的頭布局這種尺寸變化特性導致一開始我們的最外層檢視尺寸為0。導致有約束的衝突,這時候控制台列印出了警報,而且可能有很多警告。每個警告中都有類似這種問題,***view.width == 0。「」
這種警告也反應出了父檢視寬度為0 導致約束衝突。當檢視展開後,我們的約束又沒有衝突了,runloop更新ui後其實又沒有問題了,所以這時候介面又變現的很正常。但是其實之前確實是有約束衝突的,控制台也輸出了警告資訊。
看到這裡其實我們知道了原因了。就是我們的自定義的檢視的最外層view尺寸變為了0,這時候我們的view有約束衝突。控制台列印出了約束警告。之後當我們的檢視尺寸展開後又一切正常,ui上也沒任何問題。
可以看出確實self.viewheader的尺寸從0展開。
第一種辦法: 利用優先順序
可以看到我們解決辦法是又新建立了乙個viewtemp,在這個viewtemp上新增我們的self.viewheader。在進行約束,並把優先順序調到900。
這時候一開始self.viewheader尺寸為0,這時候我們的自定義檢視尺寸嘗試去縮小到0。但是發現有約束衝突,由於優先順序較低所以不再進行繼續縮小。當self.viewheader展開後,我們的自定義檢視嘗試去展開,展開後沒有問題。
第二種辦法: 在runloop下乙個迴圈中進行約束
親測這種辦法也可以解決問題。在runloop第乙個迴圈週期內viwetemp的尺寸完成了從0展開。這時候和self.viewheader沒有關係。
在runloop低二個迴圈週期時候完成約束。這時候其實父檢視已經完成了布局的變化,檢視已經完全的展開了,所以self.viewheader也不會受到影響。
推薦:第一種方法
方法二要進行兩次更新ui,如果由於計算錯誤,有可能第一次會看到乙個不正確的ui。所以不推薦這種方法。
當我們遇到控制台列印==""== 的問題。這時候ui介面卻完好。
這時候我們要檢查是不是用的tableview.tableheaderview,如果是,那麼就這樣進行修改試試看吧。
控制台輸出控制
by jingzhongrong 通過win32api提供的函式,可以對控制台程式的輸出進行控制,例如字型顏色 標題文字,以及各種屬性等等。主要使用到的函式以及宣告如下 handle getstdhandle dword nstdhandle 此函式用於獲取控制台輸出 輸入控制代碼。得到控制代碼之後...
控制台介面控制(五) 輸入輸出
c中puts 函式 用來向標準輸出裝置 螢幕 寫字串並換行,其呼叫方式為,puts s 其中s為字串字元 字串陣列名或字串指標 功 能 送一字串到流stdout中 用 法 int puts char string 程式例 include int main void 說明 puts 和 printf ...
讀取控制台輸出
在新建工程窗體中新增button1 memo1 unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,stdctrls,extctrls type tfor...