【问题标题】:UiTableView appearing in wrong place on ViewController iosUiTableView 出现在 ViewController ios 上的错误位置
【发布时间】:2018-11-06 18:06:55
【问题描述】:

我目前正在开发一个应用程序,当按下按钮时,它会以模态方式呈现一个视图控制器,而不是按钮所在的那个。这工作正常并且出现在正确的位置,但是,模态视图控制器包含一个 UiTableView 并且这似乎出现在视图控制器的左上角,与我将它放置在情节提要中的位置相去甚远。我尝试添加所有约束,如下图所示,但没有运气。当我添加约束时,tableview 根本不会出现。

希望有人可以帮助我,因为我遇到了死胡同。

谢谢 杰米

【问题讨论】:

    标签: ios xcode xamarin.ios storyboard


    【解决方案1】:

    好的,您的 UI 似乎是使用故事板制作的。没关系,但您应该知道还有另一种创建 UI 元素(tableView、按钮等)的方法:以编程方式。

    由于您使用了故事板,您可能忘记选中/取消选中其中可能导致您遇到的问题的某些设置,我可能无法轻松诊断您的问题。因此,我将向您展示如何以编程方式解决此问题。

    以编程方式

    您可以在您尝试呈现的 viewController 中以编程方式设置 tableView 的约束。

    因此,如果您要呈现的 viewController 被称为 viewController 而您的 tableView 是 tableView,那么您应该具有以下内容:

    class viewController: UIViewController {
        @IBOutlet weak var tableView: UITableView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
            /* First, tell XCode that you want to manually set the tableView's constraints using AutoLayout */
    
            tableView.translatesAutoresizingMaskIntoConstraints = false
            self.addSubview(tableView)
    
            /* setup constraints for your tableView */
            tableView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
            tableView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        }
    }
    

    创建包含 tableView 的 viewController 的另一种(更简单)的方法是简单地从 UITableViewController 而不是 UIViewController 获得 viewController inherit。这是一个巧妙的继承小技巧,您可以使用它使您的代码更加简洁,并避免编写不需要编写的代码。如果你从UITableViewController继承,你会自动在你的viewController中获得一个“免费”的tableView,而不需要创建一个新的:

    class viewController: UITableViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    }
    

    通常,如果我们只打算在其中包含一个 UI 元素:tableView,我们会继承 UITableViewController 的 viewController。另一方面,如果我们想在我们的 viewController 中有一个更复杂的布局(例如一个 tableView 只占用 viewController 的一部分,而其余的空间被其他 UI 元素占用),那么我们可能希望有viewController 继承自 UIViewController,然后在其中创建一个 tableView(就像我向您展示的第一个示例一样)。

    故事板

    使用情节提要时,首先要确保自己做得正确,即使用 AutoLayout 为 tableView 设置约束。在 main.storyboard 中,转到要呈现的视图并单击 tableView。然后,将鼠标悬停在此处的“对齐”按钮上:

    确保同时选中“在容器中水平”和“在容器中垂直”。这会将您的 tableView 置于其 superView 的中心。

    然后,还要修改以下内容:

    确保选中“限制到边距”选项。这会将 tableView 的边距限制为它的 superView(理想情况下)。

    【讨论】:

    • 非常感谢您的回复。如果可能的话,我宁愿坚持使用故事板,因为我的应用程序的其余部分都是以这种方式完成的。奇怪的是,我与另一个视图有完全相同的设置,但它包含一个选择器模式,但这个工作绝对正常,根本没有任何限制??
    • 我完全理解并重视你所说的话。这是我的第一个应用程序,所以现在只想坚持故事板。你知道我需要在故事板中使用什么吗?或者你根本不使用它们?
    • 是的,完全不用担心!这是一个伟大而详细的答案
    • 这不会改变任何事情。表格视图仍然出现在左上角
    • 再次感谢您的帮助,但这似乎也不起作用。当我开始更改约束时,会发生两件事,要么表格视图出现在左上角,要么表格视图根本不出现
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多