自动布局在 ios 8.3 上无法正常工作

Posted

技术标签:

【中文标题】自动布局在 ios 8.3 上无法正常工作【英文标题】:AutoLayout does not work properly on ios 8.3 【发布时间】:2016-12-06 21:37:44 【问题描述】:

我正在尝试添加 facebook 按钮。

由于您无法从界面构建器中拖放 facebook 按钮,因此您需要以编程方式进行。

我添加了一个没有文本的虚拟按钮,并尝试将其约束分配给 facebook 按钮。它可以在 10.1 模拟器上运行,但是当我在 8.3 模拟器上测试时却不行。我想知道我做错了什么?

- (void)viewDidLoad

    [super viewDidLoad];
    facebookLoginButton = [[FBSDKLoginButton alloc] init];
    [self.view addSubview:facebookLoginButton];


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

ios 8.3 在屏幕原点显示 facebook 登录按钮

ios 10.1 将 facebook 登录按钮完全显示在与虚拟按钮位置匹配的右侧按钮上。

【问题讨论】:

【参考方案1】:

直接设置对象的frame 不使用自动布局。自动布局使用约束,并且以编程方式添加视图将导致添加隐式约束,除非您将 translatesAutoResizingMaskIntoConstraints 设置为 false

自动布局将在下次重新计算布局时覆盖框架。

但是,您可以轻松地直接在 Interface Builder 中添加按钮; FBSDKLoginButton 继承自 FBSDKButton,后者继承自 UIButton

您可以简单地在 Interface Builder 中添加一个 UIButton,然后将其自定义类设置为 FBSDKLoginButton

【讨论】:

以上是关于自动布局在 ios 8.3 上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:自动布局无法正常工作

iOS 8 中的表格视图单元格自动布局

UICollectionViewCell 中的自动布局宽度常量无法正常工作

当图像视图和标签对齐在一起时,自动布局无法正常工作

自动布局 UICollectionView iOS 8

集合视图中的自动布局 ImageView 高度锚冲突且无法正常工作