質問: iOS8でUIPickerViewを使用しているのですが、項目のtitleが長すぎて、最後が「...」と省略されてしまうので、フォントサイズを調整して対応しようとしました。 pickerView:titleForRow:forComponent: メソッドでは、フォントサイズの調整項目がないので、 pickerView:viewForRow:forComponent:reusingView: メソッドで、UILabelにattributedStringを指定したものを戻り値にして、フォントサイズの調整を行いました。 その目的は上手く果たせたのですが、pickerView:titleForRow:forComponent: メソッドでは、pikerViewの中央選択部位が、非選択部位に対して拡大表示されているのに対し、pickerView:viewForRow:forComponent:reusingView: メソッドでは、その拡大表示効果がなくなっていることに気がつきました(添付図をご参照ください)。 選択項目全体が表示されることが第一優先ではあるのですが、選択部位が拡大表示される効果は、選択時に分かりやすい効果があると思っています。もし、可能であれば、この2つを両立させたいと思っているのですが、UIPickerViewを用いて、これを実現するのは可能でしょうか? もし、可能であるなら、その手法、あるいは例を示唆いただけないでしょうか? 現在、Swiftを使っていますが、Objective-Cでも構いません。よろしくお願いいたします。 ちなみに pickerView:attributedTitleForRow:forComponent: メソッドは、referenceにもdeprecatedとの記載はないのですが、iOS7以降では、上手く稼働しないとの報告もあり、実際試してみましたが、pickerView:titleForRow:forComponent: メソッドとの違いが確認できませんでした(フォントサイズの調整ができませんでした)。 !添付図1!添付図2
回答: 自己回答です。やっぱり難しいでしょうか? その後、自分で調べて分かったところを記載しておきます(Appleのreferenceには記載されていないことを中心に)。 UIPickerViewの項目を設定するdelegate methodには、以下の3つがあります。 ``` pickerView:titleForRow:forComponent: pickerView:attributedTitleForRow:forComponent: pickerView:viewForRow:forComponent:reusingView: ``` pickerView:titleForRow:forComponent: →テキストを設定するだけの最も簡単なもの。中央選択部位が拡大表示される。 pickerView:attributedTitleForRow:forComponent: →attributeを設定できるのは、テキストの色だけ。中央選択部位が拡大表示される。 pickerView:viewForRow:forComponent:reusingView: →いろいろカスタマイズする場合には、これ。UIViewとしてUILabelを使って、UILabelにNSAttributedStringを設定する手法が多く紹介されている。中央選択部位の拡大表示がなくなってしまう。 このメソッドについては、英語版stackoverflowでも、下記のコメントを見つけました。 The only issue with this approach is that views in picker view don't get the nice zoom effect when selected but strings do. – Indoor Dec 27 '13 at 18:56 しかし、自分のサーチ能力では、このIndoorさん以外にUIPickerViewの拡大表示に言及している人は誰もいませんでした。