2016-12-05 26 views
0

Facebookのボタンを追加しようとしています。フレームに制約が割り当てられていません

インタフェースビルダーからfacebookボタンをドラッグアンドドロップできないため、プログラマチックに行う必要があります。

テキストなしのダミーボタンを追加し、その制約をfacebookボタンに割り当てようとします。

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; 
loginButton.frame = dummyButton.frame; // try to assign frame values to the facebook button 
[self.view addSubview:loginButton]; 

次の図は、ダミーボタンの制約を示しています。

enter image description here

しかし、私が見たものに基づいて動作しないようです。

enter image description here

答えて

2

自動レイアウト制約

  • 算出フレームに基づいて、ビューのレイアウトに基づいてフレームのtwo step process

    1. Caclutionsあります。

    ビューが表示される前に、この2つのステップのプロセスが複数回発生する可能性があるため、viewDidLoadまたはviewWillAppearのフレームが期待されるフレームであるとは保証されません。

    フレームを更新する最も良い場所は、ビューがそのサブビューをレイアウトするときです。

    ので、このライン、

    loginButton.frame = dummyButton.frame 
    

    が期待されるフレームを保証するものではありません。

    あなたは常に最新のアップデートフレームを持っていることを確認するために、あなたはあなたのフレームを更新することができ、

    viewDidLayoutSubviewsまたはlayoutSubviews

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        facebookLoginButton = [[FBSDKLoginButton alloc] init]; 
        [self.view addSubview:facebookLoginButton]; 
    } 
    
    -(void)viewDidLayoutSubviews { 
        [super viewDidLayoutSubviews]; 
        facebookLoginButton.frame = dummyButton.frame; 
    } 
    

    それとも

    あなたが代わりにAのダミービューを使用することができますボタンをクリックし、Facebookのボタンを追加してダミービューを埋めます。

  • +0

    これはiOS 10.1でも動作しますが、意外にもios 8.3では動作しません。何か案が? – hotspring

    関連する問題