繁体   English   中英

没有数据显示时,Objective-C删除表视图

[英]Objective-c remove table view when no data present to show

当前在我的应用程序中,当表格视图中没有数据可显示时,它显示出很高的空白,我希望该空白消失。

我需要一种以编程方式将高度更改为0或完全从布局流程中隐藏视图的方法(因此,在没有数据的情况下,它不会影响其他UI组件)。 似乎无论我采取什么方法,我都拥有这个丑陋的白色空白。 我只能假设它是因为我在桌子上的高度限制为500。我试图以编程方式删除此列表没有运气,只需要一些帮助。

我的代码:

if([theData count] <= 0) {    
    CGRect frame = self.ScrollView.frame;
    frame.size.height = 0;
    self.TableView.frame = frame;
}

我也尝试过:

if([theData count] <= 0) {    
    self.TableView = nil
}

还有其他一些不值得一提的愚蠢的事情。 有人可以帮我吗? 我主要只是希望没有数据时整个表都消失了。

正如您已经提到的那样,TableView的高度限制设置为500。创建tableView的高度限制的IBOutlet可以说tableViewHeightConstraint 最后,为了将tableView height的框架设置为0,您可以使用数据源的didSet方法

var theData : [whatever_your_data_type] {
    didSet {
        if theData.count == 0 {
            self.tableViewHeightConstraint.constant = 0
            self.tableView.layoutIfNeeded()
        }
        else {
            if self.tableViewHeightConstraint.constant == 0 {
                self.tableViewHeightConstraint.constant = 500
                self.tableView.layoutIfNeeded()
            }
        }
    }
}

Objective-C中的代码

将设置器写入数组。 如果您的阵列名称是theData,

-(void)setTheData:(NSMutableArray *)theData {
    if(self.theData.count == 0) {
        self.tableViewHeightConstraint.constant = 0;
        [self.tableView layoutIfNeeded];
    }
    else {
        if(self.tableViewHeightConstraint.constant == 0) {
            self.tableViewHeightConstraint.constant = 500;
            [self.tableView layoutIfNeeded];
        }
    }
}

编辑2:

第1步:打开包含tableView的xib / storyboard。

步骤2:在xib / storyBoard中选择tableViewHeight约束

步骤3:现在将控件从高度限制拖动到拥有tableView的viewController中

在此处输入图片说明

我想传达的逻辑是使用数组的setter决定是否显示tableView的逻辑。 您可以使用此逻辑来隐藏tableView /将框架设置为0 /将高度约束设置为0或您想使用的任何方法:)

您可以检查数组计数并将表rect设置为零,如下所示

- (void)viewDidLoad {
    [super viewDidLoad];
    self.array =[NSMutableArray array];
    // Do any additional setup after loading the view, typically from a nib.
    if (self.array.count ==0)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.myTable.frame = CGRectZero;
        });
    }
}

我已经在viewDidLoad中编写了代码。 您可以在代码中放置所需的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM