是否可以更改样式为 UIAlertController 的操作表的 Y 位置?

Posted

技术标签:

【中文标题】是否可以更改样式为 UIAlertController 的操作表的 Y 位置?【英文标题】:Is it possible to change the Y-position of action sheet styled UIAlertController? 【发布时间】:2021-02-22 06:06:55 【问题描述】:

当前,我正在通过以下代码显示操作表样式 UIAlertController

@IBAction func attachmentButtonClicked(_ sender: Any) 
    let chooseImageImage = UIImage(systemName: "photo")
    let takePhotoImage = UIImage(systemName: "camera")
    let drawingImage = UIImage(systemName: "paintbrush.pointed")
    let recordingImage = UIImage(systemName: "mic")

    let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
    let chooseImageAction = UIAlertAction(title: "choose_image".localized, style: .default) 
        UIAlertAction in
        // Write your code here
    
    chooseImageAction.setValue(chooseImageImage, forKey: "image")

    let takePhotoAction = UIAlertAction(title: "take_photo".localized, style: .default) 
        UIAlertAction in
        // Write your code here
    
    takePhotoAction.setValue(takePhotoImage, forKey: "image")

    let drawingAction = UIAlertAction(title: "drawing".localized, style: .default) 
        UIAlertAction in
        // Write your code here
    
    drawingAction.setValue(drawingImage, forKey: "image")

    let recordingAction = UIAlertAction(title: "recording".localized, style: .default) 
        UIAlertAction in
        // Write your code here
    
    recordingAction.setValue(recordingImage, forKey: "image")

    let cancelAction = UIAlertAction(title: "Cancel".systemLocalized, style: .cancel) 
        UIAlertAction in
        // It will dismiss action sheet
    

    alert.addAction(chooseImageAction)
    alert.addAction(takePhotoAction)
    alert.addAction(drawingAction)
    alert.addAction(recordingAction)
    alert.addAction(cancelAction)

    // https://***.com/questions/55653187/swift-default-alertviewcontroller-breaking-constraints
    self.present(alert, animated: true, completion: nil)

结果如下


我想知道,有没有办法调整UIAlertController 的 Y 位置,这样就不会阻挡底部工具栏的可见性?我希望达到如下截图所示的效果。

【问题讨论】:

您不能自定义 UIAlertController。只需编写您自己呈现的视图控制器并将其放置在您喜欢的位置。 【参考方案1】:

你需要找到子视图,然后改变底部约束的常量。

\\-----OtherCode-----

if let bottomConstraint = alert.view.subviews[0].subviews.last?.constraints.first(where:  ($0.firstAttribute == .bottom) ) 
    bottomConstraint.constant = bottomConstraint.constant - 50

self.present(alert, animated: true, completion: nil)

【讨论】:

以上是关于是否可以更改样式为 UIAlertController 的操作表的 Y 位置?的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何工具可以为 wpf(xaml)中的复杂控件创建实时样式 [关闭]

是否可以在 Vaadin 8 中更改 CustomComponent 标题的样式

为 html5 原生日期选择器设置日历样式

如何跨域更改 iframe 内容的样式?

使用按钮更改样式并保存此状态

在 CSS 悬停事件中,我可以更改另一个 div 的样式吗? [复制]