首先,我是Swift编程的新手。
我正在尝试在UITableView上显示自定义视图。
我面临两个主要问题:
a)子视图首先没有正确显示。参考图片如下:
并且片刻之后加载了实际视图:
b)滚动UITableView后,视图不会超过UITableView的当前顶部滚动位置
以下是添加子视图的代码:
let vaAdPopupViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AdPopupWithCrossViewController") as! AdPopupWithCrossViewController
vaAdPopupViewController.adID = adID
vaAdPopupViewController.tableView = self.tableView
if let message = parseJSON["adv_text"] as? String{
vaAdPopupViewController.message = message
}
let navigationBarFrame: CGRect = (self.navigationController?.view.frame)!
let frameSize = CGRect(x: navigationBarFrame.minX, y: navigationBarFrame.minY, width: navigationBarFrame.width, height: (navigationBarFrame.height - (self.navigationController?.navigationBar.frame.size.height)!))
vaAdPopupViewController.view.frame = frameSize
self.tableView.addSubview(vaAdPopupViewController.view)
vaAdPopupViewController.view.tag = 1000
self.addChildViewController(vaAdPopupViewController)
vaAdPopupViewController.didMove(toParentViewController: self)
也在AdPopupWithCrossViewController中:
override func viewDidLoad() {
self.view.superview?.layoutIfNeeded()
self.view.layoutIfNeeded()
super.viewDidLoad()
}
请指导我如何解决此问题。
谢谢。
答案 0 :(得分:1)
正如Dan所说,您应该将弹出窗口添加为视图控制器视图的子视图,而不是表视图。表视图的视图层次结构是私有的,您不应该试图弄乱它。
请注意,您无法使用表视图控制器执行此操作。这一直困扰着我,但这是事实:A UITableViewController
管理单个表视图而不是其他任何东西。如果需要更复杂的视图层次结构,则需要将表视图控制器嵌入另一个视图控制器中。我这样做是为了容器视图和嵌入segue,这很容易。
如果您这样做,那么您可以将新视图控制器的内容添加到父视图控制器的内容视图,而不是表视图控制器的视图(或表视图本身)
答案 1 :(得分:1)
您可能想要创建Present Modally
Segue或通过代码使用present()
。
您已经创建了AdPopupWithCrossViewController
。将其背景颜色设置为半透明。然后你可以这样呈现:
let vaAdPopupViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AdPopupWithCrossViewController") as! ModalOverTableViewController
vaAdPopupViewController.modalPresentationStyle = .overCurrentContext
self.present(vaAdPopupViewController, animated: true, completion: nil)
然后,您的小“X”按钮可以删除广告:
@IBAction func closeTapped(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
您可以尝试.modalPresentationStyle
和.modalTransitionStyle
上的各种选项,以及将animated
设置为true或false,以获得您想要的外观/行为。