2012-03-13 9 views
2

私はユーザーのアイコンのイメージとユーザーの名前のラベルを持っています そしてイメージとラベルを画面の中央に水平に揃えたいと思います。UIImageとUILabelを一緒に水平に合わせるにはどうすればいいですか?

ラベルの長さがユーザーの名前の長さで変わるので(画像のサイズは固定されています) 私は固定値としてpositonを設定できません。

イメージのポジションとランタイムをランタイムに変更しました。 便利ではありません。

これを行うには良い方法はありますか?

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

をここでスナップショットです:

enter image description here enter image description here enter image description here

すべての権利。 私はIBだけでこれを行うのに便利な方法はないことを知っています。 そして[label sizetoFit]の機能を学びます。 非常に役に立ちます。

アンドロイドでは、xmlレイアウトでこれを行うのが非常に便利です。 しかし、私はイメージとラベルの位置を制御するコードを書く必要があります。 はい...あまりにも悪くありません。これは、画像上のラベルの中央には、それが一番上に表示されるようになりますcenter..and皆:)

+1

いくつかスナップショットを投稿できますか? –

+0

スナップショットを追加しました。画像のサイズは固定されていますが、ラベルの長さに合わせてポジションを変更する必要があります。 貧しい私の英語のために申し訳ありません。 –

答えて

3
[label sizetoFit]; 
label.center =imageView.center; 

おかげで...

今あなたがちょうど移動するCGRect操作を使用することができますあなたの画像の高さに基づいて、下向きにラベルを付けます。

編集...今、あなたがこれを行うことができます。..

CGRect frame = label.frame; 
frame.origin.x -= imageview.frame.size.width/2 - 15; // you can change 15 to a more appropriate number based on your preference.. 
label.frame = frame; 

あなたが私の答えに上に与えられたコードの2行を行った後、上記を実行してください。あなたの-layoutSubviews法で

+0

[label sizetoFit]はうまくいきます。 しかし、label.center = imageView.center;しない。 私は明確に表現していないかもしれません。 イメージとラベルのpositon.yは同じですが、position.xは異なります。 画像はラベルの左側にあり、ラベルは画像の右側にあります。 –

+1

あなたが望むものをスクリーンショットで説明します..? – Shubhank

+0

私はスナップショットを追加しました –

1
#define MARGIN 10.0f 

、次の操作を行います。

[ label sizeToFit ] ; 
CGRect r = label.frame ; 
r.origin = (CGPoint){ CGRectGetMaxX(imageView.frame) + MARGIN, CGRectGetMidY(imageView.frame) - 0.5 * r.size.height } ; 
label.frame = CGRectIntegral(r) ; 

更新ここ

boundsを囲むビューの境界に設定する必要があり、画像表示やラベルユニットをセンタリングする方法です

// 
// center an image view + label in parent view, with label to right of image view 
// 

[ label sizeToFit ] ; 
CGSize size = (CGSize){ imageView.image.size.width + MARGIN + label.bounds.size.width, 
    MAX(imageView.image.size.height, label.bounds.size.height } ; 
CGRect r = (CGRect){ 
    { CGRectGetMidX(bounds) - 0.5 * size.width, 
     CGRectGetMidY(bounds) - 0.5 * size.height }, 
    size } 
} ; 

CGRect imageFrame, labelFrame ; 
CGRectDivide(r, &imageFrame, &labelFrame, imageView.image.size.width, CGRectMinXEdge) ; 
imageView.frame = imageFrame ; 
labelView.frame = labelFrame ; 
+0

ここで 'MARGIN'はイメージビューの右端とラベルの左端の間のスペースです。 – nielsbot

+0

' UILabel'のテキストが中央にあることを指摘しておきます垂直方向に表示されるので、ラベルの高さをイメージビューの高さと同じにして、同じ効果を得ることもできます。 – nielsbot

+0

はい、高さは同じです。ありがとうございました。さらに2つのスナップショットを追加します。 –

1

いくつかの計算UIImageViewの幅+オフセット幅(スペースb/n UIImageViewとUILabel「一定値として保持する」)+ UILabel Width =「X」幅を取得します。

iPhone画面幅が460

320-X =残幅です。

残りの幅/ 2この値をUIImageViewのX値に渡します。これはあなたを助けるかもしれません。

+0

はい、私はこのようにしました。しかし、私は申し訳ありません。たぶん幅は320です。 –

+0

私の間違い申し訳ありません! –

関連する問題