2016-12-05 81 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 

不保证预期帧。

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

viewDidLayoutSubviewslayoutSubviews

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

-(void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    facebookLoginButton.frame = dummyButton.frame; 
} 

或者

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

+0

它适用于iOS 10.1,但令人惊讶的是它不适用于ios 8.3。任何想法? – hotspring