UiTableView出现在ViewController iOS上的错误位置

时间:2018-11-06 18:06:55

标签: ios xcode xamarin.ios storyboard

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

This is the image showing my Modal View Controller, With the table view being inside a view on the right hand side

Image showing where the UiTableView appears in relation to the location in storyboards

Constraints Added

Result After Constraint

希望我能走到尽头的时候有人可以帮忙。

谢谢 杰米

1 个答案:

答案 0 :(得分: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继承。这是一个巧妙的小继承技巧,可用于使代码更加简洁,并避免编写不需要编写的代码。如果您从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。然后,将鼠标悬停在此处的“对齐”按钮上:

enter image description here

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

然后,还修改以下内容:

enter image description here

确保已选中“约束到边距”选项。这将tableView的边距限制在其superView上(理想情况下)。