2016-04-13 3 views
0

ボタンを取得する値の数に基づいてプログラムで作成する必要があり、各ボタンの幅はテキストの長さに比例する必要があります。 私の現在の実装は、固定長さで増分するX位置の固定幅を持っています。Swift 2.1 - テキストの長さに対して幅の動的なボタンを作成する

これを達成するプロセスは何ですか。添付されたスクリーンショットのようなボタンを使用できますか?あなたはボタンのテキストを設定し

for var i = 0; i < self.category.count; i++ { 
    let frame1 = CGRect(x: 0 + (i * 45), y: 20, width: 80, height: 40) 
    let button = UIButton(frame: frame1) 
    button.setTitle("\(category[i].name!)", forState: .Normal) 
    button.backgroundColor = UIColor.blackColor() 
    self.categoryScrollView.addSubview(button) 
} 

enter image description here

+0

フレームを設定するのではなくレイアウトの制約を使用すると、ボタンのサイズが自動的に調整され、FYI:forループのタイプは推奨されなくなります。 – PeejWeej

答えて

3

た後で、ボタンの幅を読んで、この数はすべてのボタンで同じになります(これに該当する番号を追加

button.sizeToFit() 

使用テキストの長さに関係なく、目的の結果が得られます

また、ボタンにパディングを追加することもできます。その場合は、 tステップ。

+0

ありがとうございます。ボタンの幅はどうすればわかりますか?私は最良の方法は、 'button.sizeToFit()'を使用してパディングを追加することだと思います。パディングを追加するコードを表示できますか? CGRectがまだ必要なのかどうかはわかりません。そして、一貫したマージンをもってそれらを水平に広げる(x位置)ことは依然として問題である。 –

+1

は 'button.contentEdgeInsets = UIEdgeInsetsMake(10,10,10,10)'を試してみてください。希望の結果を得るために数字で再生してください。あなたは今のところフレーム/ cgrectを最初に定義しなければなりません。そして、後でコードが正しく修正されます。 – Kashif

+0

contentEdgeInsetsはボタンの幅内にパディングを追加します。これにより、すべてのボタンテキストが '...'になるか、テキストが表示されなくなります。 Outsetメソッドがないようです。望ましい結果を得るにはまだまだ長い道のりです。 'sizeToFit()'を実行した後、ボタンの幅を取得する方法は? –

関連する問題