1

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
    */

}

私のView Controllerには、外部ボタンのイベントハンドラーがあります。UIViewアクションは、Xcode の Storyboard Interface Builder で作成された空に上記のカスタム ビューを追加することです。

コードは次のようになります。

-(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)に配置しますこの点は、カスタム ビューの原点に相対的です。その位置の代わりに、ビューはその位置から遠く離れているように見えます.2番目の問題は、initWithFrame で設定された背景色 (灰色) が完全に無視されることです。CreateGuiObjects 内の addSubview へのすべての呼び出しを削除すると、空のビューが正しい背景色で正しい位置に描画されます。

編集: `mOnOffSwitch.translatesAutoresizingMaskIntoConstraints = NO; を削除した場合。それは正常に動作します...しかし、もう一度置くと動作しません。このプロパティの意味を深く理解する必要があります。

誰かが私を助けることができますか?ばかげた質問だと思いますが、iOS開発は初めてです:(

アドバイスありがとう

4

1 に答える 1

1

メソッド translatesAutoresizingMaskIntoConstraints = YES は、UIView が自動レイアウトを使用していることを意味します。

自動レイアウトの基本的な構成要素は制約です。制約は、インターフェイス内の要素のレイアウトに関するルールを表します。たとえば、要素の幅、または別の要素からの水平距離を指定する制約を作成できます。制約を追加および削除するか、制約のプロパティを変更して、インターフェイスのレイアウトに影響を与えます。

ユーザー インターフェイス内の要素の実行時の位置を計算するとき、自動レイアウト システムはすべての制約を同時に考慮し、すべての制約を最もよく満たすように位置を設定します。

自動レイアウトの概念の詳細を読む

自動レイアウトの使用方法がわからない場合は、オフにすることをお勧めします。

于 2013-11-13T11:26:18.550 に答える