swift - xcode 11中使用frame = bound选项时未对齐

Posted

技术标签:

【中文标题】swift - xcode 11中使用frame = bound选项时未对齐【英文标题】:Mis-aligned when use frame = bound option in swift - xcode11 【发布时间】:2020-08-23 01:07:01 【问题描述】:

我是 iPhone 开发的初学者。我正在修改现有项目中的一些代码。

我在注册时有一个签名按钮,当它对齐良好时。约束设置正确。 但现在我在我的登录页面中添加了相同的代码(Apple 登录按钮代码)。但这并不好 居中并对齐。 下面是我用于添加苹果登录按钮的代码

 if #available(ios 13.0, *) 
        let authorizationButton = ASAuthorizationAppleIDButton()
        
  
        authorizationButton.addTarget(self, action: #selector(handleLogInWithAppleIDButtonPress), for: .touchUpInside)
        
        authorizationButton.frame = self.appleSignInButton.bounds

        
        self.appleSignInButton.addSubview(authorizationButton)


        
     else 
        self.appleSignInView.isHidden = true
    

结果如下图。

但是当注册页面上使用相同的代码时

两个页面的约束属性也相同。

【问题讨论】:

您是否让一个按钮成为另一个按钮的子视图?还是appleSignInButton 只是一个UIView 【参考方案1】:

在对齐视图时不要打扰frames 和bounds。让 Auto Layout 通过提供适当的约束来处理它:

let authorizationButton = ASAuthorizationAppleIDButton()

authorizationButton.addTarget(self, action: #selector(handleLogInWithAppleIDButtonPress), for: .touchUpInside)

self.appleSignInButton.addSubview(authorizationButton)

// Don't use the frame, place the view using constraints
authorizationButton.translatesAutoresizingMaskIntoConstraints = false

// Set the constraints after adding the view to the view hierarchy
NSLayoutConstraint.activate([
    authorizationButton.leadingAnchor.constraint(equalTo: appleSignInButton.leadingAnchor),
    authorizationButton.trailingAnchor.constraint(equalTo: appleSignInButton.trailingAnchor),
    authorizationButton.topAnchor.constraint(equalTo: appleSignInButton.topAnchor),
    authorizationButton.bottomAnchor.constraint(equalTo: appleSignInButton.bottomAnchor)
])

【讨论】:

谢谢。它运作良好。但仍然感到困惑,这就是为什么我的代码在注册屏幕上而不是在登录屏幕上工作。

以上是关于swift - xcode 11中使用frame = bound选项时未对齐的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 11 - 在催化剂 Swift 中禁用调整大小模式

Alamofire 模块未使用 Swift 3.0.1 编译

ionic cordova build ios 使用 xcode swift 3 框架安装自定义插件失败

当我在 Xcode 11 中将 swift 4.2 转换为 swift 5 时继续加载

Xcode 11 中 Swift Combine.framework 的可选链接

如何在 Xcode 11 中删除 Swift 包依赖项?