簡體   English   中英

添加在XIB UIView內部以編程方式創建的自定義UIView

[英]Add custom UIView programmatically created inside XIB UIView

我已經以編程方式創建了一個UIView ,它嵌入了幾個UIControl (主要是UIButtonUISwitchUILabel )。 我在此類的-(id)initWithFrame:中設置背景色。 我創建了一條消息,將UIControls添加到視圖中,以便放入自定義視圖中。 就像這樣:

-(void) CreateGuiObjects
{
    UIView *container = self;

    //create uiswitch
    mOnOffSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 20, 0, 0)];
    mOnOffSwitch.translatesAutoresizingMaskIntoConstraints = NO;   //used for constraint testing
    //add parent view (self)
    [container addSubview: mOnOffSwitch];

    /*
    other stuff like above
    */

}

然后在我的視圖控制器中,有一個用於外部按鈕的事件處理程序; 該操作是將上述自定義視圖添加到用Xcode的Storyboard Interface Builder創建的空UIView中。

代碼如下:

-(void)CreateButton
{
  MyCustomView *view = [MyCustomView alloc] initWithFrame:CGRectMake(20,20,300,200)];
  [self.view addSubview: view];
  //now call my create method
  [view CreateGuiObjects];
}

現在的問題是它繪制了控件,但似乎將它們放置在其他位置...我在(20,20)中設置了容器視圖的框架原點,然后在(10,20)中放置了開關此點相對於自定義視圖原點的位置。 而不是該位置的視圖似乎遠離該位置,第二個問題是initWithFrame中設置的背景顏色(灰色)被完全忽略了。 如果我刪除CreateGuiObjects內部對addSubview的所有調用,它將以正確的背景顏色和正確的位置繪制空視圖。

編輯:如果刪除`mOnOffSwitch.translatesAutoresizingMaskIntoConstraints = NO; 它工作正常...但是,如果我再說一遍,它不起作用。 需要深入了解此屬性的含義。

有人可以幫我嗎? 我認為這是一個愚蠢的問題,但我是iOS開發的新手:(

感謝建議

方法translationsAutoresizingMaskIntoConstraints = YES表示UIView使用自動布局。

自動布局中的基本構建塊是約束。 約束表達了界面中元素布局的規則; 例如,您可以創建一個約束,該約束指定一個元素的寬度或與另一個元素的水平距離。 您添加和刪除約束,或更改約束的屬性,以影響界面的布局。

在計算用戶界面中元素的運行時位置時,自動版式系統會同時考慮所有約束,並以最能滿足所有約束的方式設置位置。

閱讀有關自動布局概念的更多信息

如果您不知道如何使用自動版式,建議您將其關閉。

暫無
暫無

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

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