Frame不分配约束

时间:2016-12-05 04:09:05

标签: ios xcode facebook autolayout

我正在尝试添加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

1 个答案:

答案 0 :(得分:2)

Autolayout是two step process

  1. 基于约束的帧的计算
  2. 基于计算帧的视图布局。
  3. 在视图出现之前,这两步过程可能会多次发生,因此,viewDidLoad或viewWillAppear中的帧不能保证是预期的帧。

    因此,更新框架的最佳位置是视图显示其子视图。

    因此这一行,

    loginButton.frame = dummyButton.frame
    

    不保证预期的帧。

    要确保始终拥有最新的更新框架,您可以更新框架

    viewDidLayoutSubviewslayoutSubviews

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

    您可以使用虚拟视图而不是按钮,并添加Facebook按钮以填充虚拟视图。