2016-05-16 3 views
0

私は自分のアプリケーションがこのように振る舞うようにしたい:中心に二つのビュー

enter image description here

私がこれらの手順に従っ私NavigationItem.titleView

のための正確な動作を有することが重要ですこれまでのところ:

アプリケーションで3つのビューをプログラムで作成しています。

(1)container =>(2)を保持し、(3)=> gestureRecognizerが

let container = UIView(frame: CGRectMake(0,0,200,40)) 

が結合している(2)imageContainer =>は=イメージ

 let imageContainer = UIImageView(frame: CGRectMake(0, 0, 30, 30)) 
     imageContainer.image = UIImage(named: "mock.jpg") 

(3)textContainerを有します>私はそれらを揃えるために、画像の中心を設定しています以下のいくつかのテキスト

 let textContainer = UILabel(frame: CGRectMake(0,0, 180, 20)) 
     textContainer.text = "Group xY" 

を持っています

imageContainer.center = CGPointMake(container.frame.size.width/2, 
     container.frame.size.height/2) 
textContainer.center = CGPointMake(container.frame.size.width/2, 
      container.frame.size.height/2) 
は今、私はtitleViewの要素が適切に配置されていないことを、私のビューにすべてのサブビューを追加し、アプリのショーを開始

self.navigationItem.titleView = (1) 

を設定しています

enter image description here

この正確な動作を正しく実装する方法はありますか?

注:は円形のイメージを心配しません。私はこれを実装する方法を知っています。

答えて

1

textContainerのサイズをテキストの境界に近づけるように設定する必要があります。これを行うには、sizeToFitを呼び出してから、imageContainerをテキストの左側に設定して、イメージの中心がイメージの幅の半分とテキストの先頭からのバッファになるようにする必要があります。あなたはimageContainer.center = CGPointMake(textContainer.frame.minX - imageContainer.frame.size.width * 0.5 - buffer,container.frame.size.height/2)と言ってそれを行うことができます。あなたのコードは次のようになります:

let container = UIView(frame: CGRectMake(0,0,200,40)) 
let buffer:CGFloat = 8.0 
let maxWidth:CGFloat = 120.0 

let imageContainer = UIImageView(frame: CGRectMake(0, 0, 30, 30)) 
imageContainer.image = UIImage(named: "profile.jpg") 

let textContainer = UILabel(frame: CGRectMake(0,0, 180, 20)) 
textContainer.text = "Group xY" 
textContainer.adjustsFontSizeToFitWidth = true 
textContainer.minimumScaleFactor = 0.95 

textContainer.sizeToFit() 
textContainer.frame.size.width = min(maxWidth, textContainer.frame.size.width) 
textContainer.center = CGPointMake(container.frame.size.width/2, 
            container.frame.size.height/2) 
imageContainer.center = CGPointMake(textContainer.frame.minX - imageContainer.frame.size.width * 0.5 - buffer, 
            container.frame.size.height/2) 

container.addSubview(imageContainer) 
container.addSubview(textContainer) 

あなたのコンテナにはenter image description hereが与えられます。

+0

ありがとうございました。これは大いに役立ちます。ビューの最大幅を設定する方法はありますか?長いテキストを入力すると、Navbar全体が表示されますが、Navigationbar.barButtonItemsを持たせたい場合は – JVS

+1

私の回答を更新しました。 'sizeToFit'の後にラベルの幅を確認することができます。最大幅よりも大きい場合は、最大幅に設定します(例えば' min(maxWidth、textContainer.frame.size.width) ')。ラベルの縮尺率を調整して収縮させてください。おそらくタイトルの束を縮小したくないかもしれません。 – beyowulf

関連する問題