gpt4 book ai didi

swift - 如何将 UIViewController 的 PreferredContentSize 设置为包含 UITableView contentSize 的高度?

转载 作者:行者123 更新时间:2023-11-30 12:26:57 27 4
gpt4 key购买 nike

我调用如下所示的弹出窗口:

if let vc = CalendarDetailViewControllerContainer.storyboardInstance() {
vc.preferredContentSize = CGSize(width: ((self.view.frame.width / 5) * 2), height: vc.view.frame.height);
vc.modalPresentationStyle = UIModalPresentationStyle.popover;
vc.popoverPresentationController?.delegate = self;
vc.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.any;
vc.popoverPresentationController?.sourceView = sourceView;
vc.popoverPresentationController?.sourceRect = CGRect(x: 0, y: 0, width: sourceView.frame.size.width, height: sourceView.frame.size.height);

self.present(vc, animated: true, completion: nil);
}

正如您现在所看到的,我将 preferredContentSize 高度设置为 vc.view.frame.height。但这应该有所不同。现在,还有更多代码。在下面我的CalendarDetailViewControllerContainer中:

class CalendarDetailViewControllerContainer : UIViewController {

@IBOutlet weak var containerView: UIView!;

static func storyboardInstance() -> CalendarDetailViewControllerContainer? {
let storyboard = UIStoryboard(name: String(describing: NSStringFromClass(CalendarDetailViewControllerContainer.classForCoder()).components(separatedBy: ".").last!), bundle: nil);

return storyboard.instantiateInitialViewController() as? CalendarDetailViewControllerContainer;
}

override func viewDidLoad() {
super.viewDidLoad();

self.setupView();
self.setupDetailView();
}

func setupView() {
self.view.backgroundColor = UIColor.clear;
self.view.isOpaque = false;
}

func setupDetailView() {
if let vc = CalendarDetailViewController.storyboardInstance() {
let navigationController = UINavigationController(rootViewController: vc);

self.addChildViewController(navigationController);

navigationController.view.frame = self.containerView.frame;

self.containerView.addSubview(navigationController.view);

navigationController.didMove(toParentViewController: self);
}
}
}

我需要这个容器,因为为了以后的目的和 future 的继续,我将需要导航 Controller (并且我不会在 Storyboard中构建它)。所以代码的最后一部分:

class CalendarDetailViewController : UITableViewController {

static func storyboardInstance() -> CalendarDetailViewController? {
let storyboard = UIStoryboard(name: String(describing: NSStringFromClass(CalendarDetailViewController.classForCoder()).components(separatedBy: ".").last!), bundle: nil);

return storyboard.instantiateInitialViewController() as? CalendarDetailViewController;
}

override func viewDidLoad() {
self.navigationController?.isNavigationBarHidden = true;

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 120.0;
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude;
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude;
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension;
}
}

我现在尝试做的是将弹出窗口的 preferredContentSize 高度设置为与 TableView 的 contentSize 完全相同。

我怎样才能做到这一点?

最佳答案

您可以覆盖 CalendarDetailViewControllerContainer 的 PreferredContentSize,但请确保在计算大小之前重新加载表格并调用 layoutIfNeeded()

public override var preferredContentSize: CGSize {
get {
return CGSize(width: tableView.contentSize.width,
height: tableView.contentSize.height + tableView.layoutMargins.top + tableView.layoutMargins.bottom)
}

set { super.preferredContentSize = newValue }
}

关于swift - 如何将 UIViewController 的 PreferredContentSize 设置为包含 UITableView contentSize 的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44064577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com