2016-05-27 14 views
0

私は、3つのラベルとその中のimageViewを含む動的なセルを持つTableViewControllerを持っています。私はストーリーボードで作成しました。これは次のようになります...TableViewControllerのセル項目の制約の制御

 - Label1 
oImg - Label2 
     - Label3 

さらに、Label2はimageViewに垂直に中央揃えされています(constraint-Aと呼ばれます)。他のラベルもLabel2に整列されています。

私がしようとしているのは、TableViewControllerのcellForRowAtIndexPathでは、Label3が空であるかどうかをチェックし、Label2を下に移動し、Label1で制約を前に設定しておく(同様に下に移動する)。

最初のオプションとして、制約-AをTableViewControllerに接続しようとしましたが、TableViewCellであるため、制約コンセントをTableViewControllerに接続できません。

はその後、私はこれを達成するための適切な方法である

cell.Label2.frame.origin.y += 5 
cell.Label1.frame.origin.y += 5 

何..それらを下に移動手動でみましたが、cellForRowAtIndexPathの残りの部分は大丈夫働くのに対し、それが唯一の1行(LABEL3ない最初の1)に影響を与えるだ不気味? (したがって、制約Aを制御するか、Label2を手動で移動してLabel1を移動することができます)

+0

それはあなたの制約に依存します。 ** Constraint Outlet **を* YourCusstomCell Class *にすることができます。 cellForRowでは、Label3のデータソースが空であるかどうかを確認できます。このメソッドでは、制約を変更します。 私は制約を作るために、すべてのラベルと画像のアウトレットを作る必要があると思います。 –

+0

そしてあなたの行の高さが固定されているかどうか、あなたのラベルが1行か複数行かどうかというあなたの要求に依存します。 –

+0

Label3を設定し、テキストが空のときにimageViewの中央に垂直に削除します。label2自動的に下に移動します –

答えて

0

label1とlabel2のyコード制約のIBOutletプロパティを作成し、「プロパティ名」を変更します.constraint = "some value"フレームのyコードを変更するのではなく、

+0

Label1とLabel2のラベルを2つ作成し、それに応じて非表示にしますか? TableViewCellのUILabelからTableViewControllerへのアウトレットを作成することはできません – senty

+0

新しいラベルを作成せず、yコード制約プロパティのみを作成します。 –

+1

カスタムクラスを作成するには、CustomCellはUItableViewCellを継承し、UItableViewControllerにあるTableViewCellに接続します。これで、CustomCell内にプロパティを作成し、UITableViewControllerのcellforrowatIndexpath関数内で使用することができます。 –

1

enter image description here enter image description here

//set above image 2 
    cell.constLbl.constant = -(cell.lbl3.frame.size.height/2 - 10); // this obj below img 1 
cell.constLbl3Top.constant = cell.lbl3.frame.size.height/2; // this obj below img 2 

enter image description here enter image description here

+0

詳細な回答をいただきありがとうございます。ランジットの答えはより速いですが、あなたの説明に+1しました – senty

関連する問題