我一直在墙上撞了一会儿:
如何获取UIAlertController操作表视图的宽度?
说alert.view.frame.width
给view.frame.width
。
另外,我看到了this的问题,但它根本不起作用:它只是更改了警报的框架,我看不出如何从中获取宽度。
提前致谢。
答案 0 :(得分:1)
.actionSheet
类型UIAlertController
的宽度是UIWindow
(纵向模式)的宽度减去每侧10个填充点,无论设备方向如何。
E.g。对于iPhone 7,其宽度为375点:
不出所料,355分是我从alert.view.frame.width
获得的相同值,因为该值是在present(_:animated:completion:)
的完成块中访问的,即在视图出现后。
答案 1 :(得分:0)
xoudini's Answer绝对是一个解决方案。但缺点可能是在完成块中添加具有正确宽度的自定义视图的延迟很小。见gif:
所以替代解决方案可能是,只需使用this extension for UIDevice然后通过检查modelName
,您可以设置不同设备的操作表的宽度值(可能有点hacky ,但你可以避免延迟,并可以在完成块之前设置宽度)。以下是iOS10当前支持的设备的操作表的不同宽度大小:
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
}
}