约束在Present ViewController中无法正常工作

时间:2018-09-25 17:40:33

标签: ios swift xcode layout constraints

我有一个类似PopUp的ViewController,但是View不能保持在我想要的位置。

我希望该视图保持在屏幕中央。下面的屏幕显示了在情节提要中的视图,其中设置了约束,并在模拟器上显示了结果。

enter image description here

AlertViewController.swift

class AlertViewController : UIViewController {

    @IBOutlet weak var frameView: UIView!
    @IBOutlet weak var btCancel: UIButton!
    @IBOutlet weak var lblInfo: UILabel!

    var delegate : AlertViewControllerDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()        
        self.frameView.layer.cornerRadius = 10
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    }

    @IBAction func cancel(_ sender: Any) {
        delegate?.cancelBt()
        self.dismiss(animated: true, completion: nil)
    }
}

MainViewController.swift(显示)

let alertController = self.storyboard?.instantiateViewController(withIdentifier: "AlertVC") as! AlertViewController
            alertController.providesPresentationContextTransitionStyle = true
            alertController.definesPresentationContext = true
            alertController.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
            alertController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
            alertController.delegate = self

            self.present(alertController, animated: true, completion: {})

编辑

我尝试过这个。

enter image description here

结果:(我确实更改了背景色)。

enter image description here

2 个答案:

答案 0 :(得分:0)

您的问题是使用在设备中运行时可能会破坏的静态值设置top,bottom,前导和尾随约束,您需要设置

  

宽度,高度,centerX,centerY

*一种良好的做法,使宽度和高度与屏幕成比例,并且取决于乘数或内容大小*

顶部标签

  

top,centerX

活动

  

顶部到标签,centerX

中间标签

  

centerX,Y

取消按钮

  

centerX,底部

答案 1 :(得分:0)

您的问题似乎与警报内容的约束无关,而与父视图相关的视图放置/约束。似乎您需要在代码中手动设置警报查看器的高度-宽度值和x,y坐标,以使其正确显示。

[编辑] 我只是注意到设置约束的顺序。确保从FrameView拖动到SuperView并在该方向上设置约束。也就是说,第一个项目:FrameView。...第二个项目:SuperView ...这也可能是您遇到麻烦的原因。

在这里,关于自动布局和PresentViewController的一些问题也进行了很好的讨论:Auto layout invalid after presenting view controller (and many situation)

无论哪种方式,我都建议对AlertView中的“内部视图”使用“水平居中”和“垂直居中”,而不要使用固定静态约束值。在不同尺寸的显示器上缩放时,这种方法似乎效果更好。

一些您可能会觉得有用的资源:

但是,鉴于您呈现的内容是一个非常简单的alertview,我建议您跳过重新发明轮子的工作,并使用一些现成的库来使您的生活更加轻松。

1。EZAlertController(如果您需要的只是文本和操作按钮)。

2。MRProgress。如果您需要的只是加载/进度指示器。

3。NYAlertView。如果您要寻找的是自由地在警报内添加自己的UIView。

这些库可为您解决“讨厌的”约束问题,并使开发更快。

[编辑] 您可能要看一下:https://github.com/vsouza/awesome-ios#alert--action-sheet,其中精选了一系列有用的Pod,这些确实有助于iOS开发。