2017-09-15 2 views
1

現在、私のアプリケーションでは、テーブルビューに表示するデータがないと、非常に背の高い空白が表示されています。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に対してアルファ0&ユーザーインタラクションNOを設定します。 –

+0

私は:(、テーブルの下に私はそのデータオブジェクトの "すべてのリスト"を表示するビューへのリンクを持っています。私が隠そうとしているものは、最新の4または5を表示するだけです。 – GoreDefex

+0

- if(self.yourArray。count == 0) { dispatch_async(dispatch_get_main_queue()、^ { self.myTable.frame = CGRectZero; }); } –

答えて

2

すでに説明したように、TableViewの高さ制約は500に設定されています。テーブルビューの高さ制約のIBOutletを作成します。最後に0にのtableViewの高さの枠を設定するために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方法を利用することができます。

ステップ1:のtableViewが含まれているあなたのXIB /ストーリーボードを開き、あなたの配列名は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]; 
     } 
    } 
} 

EDIT 2である場合。

ステップ2:XIB /ストーリーボードにtableViewHeight制約を選択

ステップ3:今のセッターを使用して、論理のtableView

enter image description here

を所有のViewControllerに高さ制約から抗力を制御しますtableViewを表示するかどうかを決定する配列は、私が伝えたいロジックです。あなたは0またはものは何でもしたいの使用に0に/高さ制約を設定したフレームを設定のtableView /を非表示にするには、このロジックを使用することができます:)

+1

私はこのアプローチにもっと同意します。OPはそのフレーム全体を0に設定するのではなく、高さの制約を修正する必要があります。 – NSGangster

+0

@nsgangster:ありがとうございました:) –

+0

OBJ-Cでこれを書くことができますか?私は即座に書いていません – GoreDefex

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でコードを記述しました。コード内のどこにでも配置することができます。

+1

これは高さの制約なしでのみ動作します – GoreDefex

関連する問題