获取UIAlertController操作表宽度

时间:2017-03-16 20:57:51

标签: ios swift swift3 uialertview uialertcontroller

我一直在墙上撞了一会儿:

如何获取UIAlertController操作表视图的宽度?

alert.view.frame.widthview.frame.width

另外,我看到了this的问题,但它根本不起作用:它只是更改了警报的框架,我看不出如何从中获取宽度。

提前致谢。

3 个答案:

答案 0 :(得分:1)

.actionSheet类型UIAlertController的宽度是UIWindow(纵向模式)的宽度减去每侧10个填充点,无论设备方向如何。

E.g。对于iPhone 7,其宽度为375点:

enter image description here

不出所料,355分是我从alert.view.frame.width获得的相同值,因为该值是在present(_:​animated:​completion:​)的完成块中访问的,即在视图出现后。

答案 1 :(得分:0)

xoudini's Answer绝对是一个解决方案。但缺点可能是在完成块中添加具有正确宽度的自定义视图的延迟很小。见gif:

enter image description here

所以替代解决方案可能是,只需使用this extension for UIDevice然后通过检查modelName,您可以设置不同设备的操作表的宽度值(可能有点hacky ,但你可以避免延迟,并可以在完成块之前设置宽度)。以下是iOS10当前支持的设备的操作表的不同宽度大小:

  • iPhone5 / iPhone5s / iPhoneSE:300
  • iPhone6 / iPhone6s / iPhone7:355
  • iPhone6Plus / iPhone6sPlus / iPhone7Plus:394

  • iPad 9.7 / 12.9 / Retina / Air1 / Air2:300

答案 2 :(得分:-1)

虽然我在这里很晚,但迟到总比没有好。

警报视图控制器的宽度在约束中设置。要获取警报控制器的宽度,您可以使用:

for constraint in self.alertView.subviews[0].constraints {

  if constraint.firstAttribute == NSLayoutAttribute.width {
  print("\(constraint.constant)")
  break
  }
}