Button.center 不能在 Swift 3 / 4 的所有屏幕上工作

Posted

技术标签:

【中文标题】Button.center 不能在 Swift 3 / 4 的所有屏幕上工作【英文标题】:Button.center not working on all screens in Swift 3 / 4 【发布时间】:2018-02-03 08:14:41 【问题描述】:

我在我的应用程序中创建了一个“更多”按钮,以及当我们聚焦按钮时的一个很酷的动画。它在 iPhone 6 上运行良好,但不适用于 6S plus 或 5s。

这是我的按钮和约束:

我创建了一个 backgroundView,当我聚焦按钮时我会制作动画:

func createBackgroundEffet(_ backgroundView: UIView, size: Int, buttonFocused: UIButton)
      backgroundView.frame = CGRect(x: 0, y: 0, width: size, height: size)
      backgroundView.backgroundColor = UIColor(red: 200 / 255, green: 200 / 255, blue: 200 / 255, alpha: 1)
      backgroundView.layer.cornerRadius = backgroundView.frame.size.width / 2
      backgroundView.clipsToBounds = true
      backgroundView.center = buttonFocused.center
      backgroundView.alpha = 1
      self.insertSubview(backgroundView, at: 2)
 

(我为示例设置了 backgroundView.alpha = 1)

这取决于屏幕的结果(在 iPhone 6 上,它完全位于“更多”按钮上)。

我认为 buttonFocused.center 的值是 iPhone 6 的值。

我能做些什么来纠正这个问题?

【问题讨论】:

你在哪里称呼这个createBackgroundEffet 在视图的didLoad()或awakeFromNib()视图中 尝试从viewWillAppearviewDidLayoutSubview调用它,在viewDidLoad视图还没有布局,导致错误行为 viewDidLayoutSubview 似乎很好,但是当我在单元格或 UICollectionReusableView 文件上时它不起作用... 【参考方案1】:

你的约束肯定有一些问题。

首先移除所有约束和这个约束

而不是像这样分配约束 对于***人物:

更多按钮:

【讨论】:

感谢您的回答,但我不能这样做。图片的高度和宽度不固定。它是根据屏幕设置的:/ 您是否尝试过将它们放入堆栈视图并使用尺寸等级?我认为它应该对你有所帮助。

以上是关于Button.center 不能在 Swift 3 / 4 的所有屏幕上工作的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:不能以编程方式在 Collectionview 标题上正确创建标签?

为啥我不能在 Swift 3 中使用 JTAppleCalendar Pod 文件 JTAppleCell?

(Swift Playground 模板)使用 Swift 5.1 编译的模块不能被 Swift 5.1.3 编译器导入

Swift 3 - 不能使用数组提出的 Alamofire 请求

现有的领域数据库不能在 swift 3.1 xcode 8 中工作

Swift 3:为啥我不能在 didDeselectRowAt 中更改 cell.accessoryType 和 cell.textLabel