Objective-c当没有数据显示时删除表格视图

问题描述:

当前在我的应用程序中,当我的表格视图中没有数据要显示时,它显示了一个非常高的空白区域,我希望它不见了。Objective-c当没有数据显示时删除表格视图

我需要一种编程方式将高度更改为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 
} 

和其他一些无聊的事不值得一提。任何人都可以在这里给我一只手吗?我主要只是想在没有数据的情况下将整个桌子都丢掉。

+0

你有任何控制在tableview下面吗?如果没有,那么只需为tableview设置alpha 0和userinteraction NO。 –

+0

我这样做:(在表格下面我有一个链接到一个显示该数据对象的“所有列表”的视图。我试图隐藏的那个只显示最近的4个或5个。 – GoreDefex

+0

确实像这样 - if(self.yourArray。count == 0) dispatch_async(dispatch_get_main_queue(),^ { self.myTable.frame = CGRectZero; }); } –

正如您已经提到过,您对TableView的高度约束设置为500.创建IBOutlet的tableView的高度约束可以说为tableViewHeightConstraint。最后,以高度的tableView的帧设置为0 U可以使数据源

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中的didSet方法的使用

写装定到您的阵列。如果阵列的名字是海图,

-(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:打开XIB /故事板含有的tableView。

步骤2:选择在XIB的tableViewHeight约束/故事板

步骤3:现在控制从高度约束拖动到该公司拥有的tableView

enter image description here

使用的设定器的逻辑的viewController该数组决定是否显示tableView是我想传达的逻辑。你可以使用这个逻辑来隐藏tableView /设置帧为0 /设置高度约束为0或任何你想使用:)

+1

我同意这种方法更多,OP应该修改高度约束,而不是将其整个框架设置为0. – NSGangster

+0

@nsgangster:谢谢你:) –

+0

你能为我写OBJ-C吗?我不是在快速写作 – GoreDefex

你可以检查你的数组计数&把你的表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中编写了代码。你可以放在你想要的代码中。

+1

这只适用于没有身高限制 – GoreDefex