UIPopoverController を使用して UITableViewController を表示します。テーブル ビューには、長さが不明な名前のリストが表示されます (ボブまたはアレクサンダーの可能性があります)。
ポップオーバーの高さを変える方法は知っていますが、名前が切り捨てられないように幅を変える方法がわかりません。
名前の幅を把握して、ポップオーバーをその幅に設定して、名前がポップオーバーからにじみ出ないようにする必要があります。
何か案は?
UIPopoverController を使用して UITableViewController を表示します。テーブル ビューには、長さが不明な名前のリストが表示されます (ボブまたはアレクサンダーの可能性があります)。
ポップオーバーの高さを変える方法は知っていますが、名前が切り捨てられないように幅を変える方法がわかりません。
名前の幅を把握して、ポップオーバーをその幅に設定して、名前がポップオーバーからにじみ出ないようにする必要があります。
何か案は?
文字列の幅を取得し、UITable をその幅に設定します。幅を取得するために追加できるメソッドを次に示します。カテゴリまたはクラスに追加できます。ここからコードを取得しました。
- (CGFloat)widthOfString:(NSString *)string withFont:(NSFont *)font {
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
return [[[NSAttributedString alloc] initWithString:string attributes:attributes] size].width;
}
このようにして、将来変更する場合に備えて、使用しているフォントを指定できます。(フォントが異なれば、明らかに幅も異なります)。
おそらくあなたは名前の配列を持っています。名前のリストを列挙し、それぞれに必要な長さを決定してから、最大のものを格納し、それを目的の幅として適用します。超えてはならない「最大サイズ」を定義する必要があります。これらの線に沿ったメソッドは、適切なものを返す必要があります。
- (CGFloat)suitableWidthForLabel:(UILabel *)nameLabel withNames:(NSArray *)arrayOfNames
{
CGFloat suitableWidth = 100.0f; // A reasonable starting point
CGSize maximumSize = CGSizeMake(600.0f, nameLabel.frame.size.height);
UIFont *labelFont = [nameLabel font];
for (NSString *aName in arrayOfNames)
{
CGSize expectedLabelSize = [aName sizeWithFont:labelFont
constrainedToSize:maximumSize
lineBreakMode:nameLabel.lineBreakMode];
suitableWidth = MAX(suitableWidth, expectedLabelSize.width);
}
return suitableWidth; // This will be the largest size you may need to accommodate
}