文字の上寄せについて | TokoTokoSoftware

TokoTokoSoftware

iPhone / iPadアプリを作っている団体「トコトコ」です
大学生二人でMacBookつかって頑張ってます!!


Tips : [UILabelで文字を上寄せ(上付き)で表示する方法]

UILabelは標準で文字を表示するときは
左に詰めたり 真ん中に寄せたり 右に寄せたり
できますけど、
大きなUILabelに少しだけ文字を表示するとわかりますが ビューの真ん中に文字が表示されてしまいますよね?
上に文字を寄せたい場合 標準ではできないため自分で上に寄せなきゃいけません。
その場合「表示しようとする文字がどれだけの縦サイズになるかを計算して、UILabelのサイズを変更する」という手段が必要です。

手順は
  1, UILabelのサイズからNSString の sizewithfontメソッドを使ってサイズを取得
  2、 そのサイズでUILabelをリサイズ
  3, 文字列を代入。

Nsstringには文字を入れるとその文字を表示するときのサイズを教えてくれるメソッドがあります

CGSize size = [newbuffer
sizeWithFont:self.font
constrainedToSize:CGSizeMake(self.bounds.size.width, 2000)
lineBreakMode:UILineBreakModeCharacterWrap];

これです。
newbufferがこれからUILabelに入れようとする新しいNsstringです。
フォント と constrainedToSize(これはUILabelの横サイズと、十分な量の縦サイズを渡す) と
lineBreakModeを設定する
すると、CGSizeを返してきます。
これが文字のサイズなので、これのサイズでUILabelをリサイズすれば上付き文字になります

self.frame = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.bounds.size.width,
size.height);

そしてこの後UIlabelのtextに文字列newbufferを入れれば上寄せで新しい文字列newbufferを
書き込めます。

-(void)AddAndKeepup:(NSString *)newbuffer{
CGSize size = [newbuffer
sizeWithFont:self.font
constrainedToSize:CGSizeMake(self.bounds.size.width, 2000)
lineBreakMode:UILineBreakModeCharacterWrap];
self.frame = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.bounds.size.width,
size.height);
self.text = newbuffer;
}

これをUILabelを継承したものに加えて [NewUILabel AddAndKeepup:@"あいうえおあいうえお" ]
などと長い文章を打ち込んでも上寄せで表示できます。