簡體   English   中英

添加子視圖后,UIViews恢復到先前的位置

[英]UIViews revert to a previous position after adding a subview

嘗試將左導航面板動態添加到View Controller時遇到一個非常奇怪的問題,(應該能夠支持應用程序中的任何View Controller,與Facebook導航有點相似)我的想法似乎很簡單,但是我真的不是看看它在哪里壞了。 我完成的工作是使用以下方法在UIViewController上創建一個Category,我認為這會將所有子視圖移至右側,然后添加新視圖。

-(void)addLeftView:(UIView *)newView
{
   newView.frame=CGRectMake(0, 0, newView.frame.size.width, self.view.frame.size.height);

   for(UIView *view in [self.view subviews])
   {
     view.frame=CGRectMake(view.frame.origin.x + newView.frame.size.width, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
   }

   [self.view addSubview:newView];
}

但是,實際上發生的是添加了視圖,但是子視圖沒有移到右邊。 但是,如果將addSubview注釋掉,則實際上所有操作確實都按預期向右移動。

更奇怪的是,如果將視圖移動包裝在[UIView animateWithDuration:completionHandler:] ,完成處理程序將在其中添加子視圖,則實際上會發生動畫-所有視圖向右移動,但是當添加子視圖時,他們跳回到起始位置。

我以為這是一種古怪的auto-layout問題,因此,為了了解發生了什么,我從該視圖控制器中清除了所有約束,並獲得了相同的結果。

在類似但不相關的線程中找到了答案。 我可以在運行時為特定的子視圖禁用自動布局嗎?

基本上是自動布局恢復我的位置,因此通過僅在問題的UIView上設置此用戶變量來禁用它,從而解決了我的問題。

您可以在xib / storyboard中所需的UIView的“用戶定義的運行時屬性”中將“ translatesAutoresizingMaskIntoConstraints”類型設置為Boolean,將“值”設置為“是”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM