调整UITableView

时间:2015-06-15 10:46:51

标签: swift uitableview resize frame

我有一个Tableview,上面是一个分段控制器。基于先前的用户动作,该分段控制器被隐藏或显示。

如果它被隐藏了,我想调整我的tableview,以使它看起来不错(否则我的屏幕上有一个空白的间隙)。

enter image description here

我尝试了以下代码(放在ViewDidLoad中),但它没有用。放置在ViewDidAppear或其他功能中时,它也无法正常工作。 Tableview是从Storyboard引用的,它不是以编程方式创建的。

    if selectedGroup == 1
    {
        self.tableView.frame = CGRectMake(0, 152, 320, 367)
        segControl.hidden = false
    }
    else if selectedGroup == 2
    {
        self.tableView.frame = CGRectMake(0, 116, 320, 403)
        segControl.hidden = true
    }

我尝试了一些其他的东西,比如使用偏移框架然后调整高度,但这也不起作用......

3 个答案:

答案 0 :(得分:1)

使用Autolayout

如果您正在使用Autolayout,并且想要更改框架,请尝试约束(IBOutlet的{​​{1}})。

enter image description here

设置约束出口并通过以下方式更改NSLayoutConstraint值:

constant

没有Autolayout

使用自动调整表单实用程序

enter image description here

您也可以通过代码(obj-c)来完成:

self.sampleConstraint.constant = 20
self.view.layoutIfNeeded()

答案 1 :(得分:0)

我的第一个猜测是你使用的是AutoLayout。在这种情况下,对视图框架的更改通常不会产生任何影响。您是否经过双重检查以确保故事板已关闭?

如果做不到这一点,最有可能导致改变无效的原因就是打破出口。添加println以显示self.tableView(或设置断点并从调试器中检查它)并确保它不是nil。

顺便说一句,对你的尺码使用常数值("魔术数字")是一个坏主意。该代码仅适用于单个屏幕尺寸,如果对布局进行任何更改,则会中断。

您应该编写代码以使其灵活。根据视图控制器内容视图的大小或先前的帧大小计算帧。

答案 2 :(得分:0)

我找到了解决方法。如果要使用自动布局但仍能够在运行时调整某些视图的大小,则可以调用viewDidLayoutSubviews。放置所有约束后调用此方法,但在调用viewDidAppear之前调用,因此用户甚至不会注意到

override func viewDidLayoutSubviews() {
    if catswitch == "1"
    {
        self.tableView.frame = CGRectMake(0, 152, 320, 367)
        scMatur.hidden = false
    }
    else if catswitch == "2"
    {
        self.tableView.frame = CGRectMake(0, 116, 320, 403)
        scMatur.hidden = true
    }
}

请参阅Can I disable autolayout for a specific subview at runtime?获取jmstone的原始答案。