[英]Add a uiview programmatically between two textfields which was created on xib with autolayout
[英]Add custom UIView programmatically created inside XIB UIView
我已經以編程方式創建了一個UIView
,它嵌入了幾個UIControl
(主要是UIButton
, UISwitch
和UILabel
)。 我在此類的-(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.