我有一个类似PopUp的ViewController,但是View不能保持在我想要的位置。
我希望该视图保持在屏幕中央。下面的屏幕显示了在情节提要中的视图,其中设置了约束,并在模拟器上显示了结果。
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: {})
编辑
我尝试过这个。
结果:(我确实更改了背景色)。
答案 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开发。