2013年2月アーカイブ

UITabBarControllerのタブは、ページ数に応じてレイアウトが等分されるという非常に良く作られたUIです。
ただタイトルが長かった場合については考えられていないようで、下図の様になってしまいます。

長いタイトルを設定します:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

NSMutableArray* viewList = [NSMutableArray arrayWithCapacity:3];

for (NSInteger i = 0; i < 3; i++) {

UIViewController* viewController = [[[UIViewController alloc] init] autorelease];

viewController.title = @"クラムボンはかぷかぷわらったよ。";

[viewList addObject:viewController];

}

UITabBarController* tabBarController = [[[UITabBarController alloc] init] autorelease];

tabBarController.viewControllers = viewList;

self.window.rootViewController = tabBarController;

    return YES;

}


実行すると:
2013-02-26 12.59.28.png
タイトルが隣のタブと重なってしまいました。

タイトルをユーザの入力に任せる場合など、少し使い辛い仕様ですね。
今回はタイトルが長過ぎた場合(タブの幅を超える場合)に溢れない様にする為の方法をご紹介します。

先ほどのコードにタイトルラベルの幅を調整する為の処理を追加します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Override point for customization after application launch.

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

NSMutableArray* viewList = [NSMutableArray arrayWithCapacity:3];

for (NSInteger i = 0; i < 3; i++) {

UIViewController* viewController = [[[UIViewController alloc] init] autorelease];

viewController.title = @"クラムボンはかぷかぷわらったよ。";

[viewList addObject:viewController];

}

UITabBarController* tabBarController = [[[UITabBarController alloc] init] autorelease];

tabBarController.viewControllers = viewList;

self.window.rootViewController = tabBarController;

// ーーーー ここから追加 ーーーー

NSArray* subviews = tabBarController.tabBar.subviews;

for (UIView* view in subviews) {

if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

for (id item in view.subviews) {

if ([item isKindOfClass:NSClassFromString(@"UITabBarButtonLabel")]) {

CGRect frame = [[item valueForKey:@"frame"] CGRectValue];

if (view.frame.size.width < frame.size.width) {

NSLog(@"ラベルサイズを調整 %f -> %f", frame.size.width, view.frame.size.width);

frame.size.width = view.frame.size.width;

[item setValue:[NSValue valueWithCGRect:frame] forKey:@"frame"];

}

}

}

}

}

// ーーーー ここまで追加 ーーーー

    return YES;

}


各タブ項目の部品にアクセスし、該当するアイテム(UITabBarButtonLabel)の幅を調整しています。
このコードを追加した状態で実行すると、次の様になりました。
2013-02-26 13.09.59.png
タブ項目の幅が変わるタイミングとしては、
 ・タブを追加した時
 ・タブを削除した時
 ・画面を回転した時
が考えられます。
すべてのケースで上記のコードを呼び出す事により、タブ項目から溢れないタイトルを実装する事ができます。
また、タブのタイトルが動的に変わる場合もタイトルが溢れる可能性がありますので、忘れず処理を行ないましょう。
無料でyLeafの全機能を利用可能な「yLeaf Lite」が本日リリースされました。
無料
(2013.02.24時点)
posted with ポチレバ
広告が表示されますが、製品版と全く変わりなくご利用になれますので、是非お試しください!

yLeaf公式サイト:
スクリーンショット 2013-02-20 19.12.00.png
定期的に特定のサイトを閲覧する方に便利なiPhone/iPad用Webブラウザアプリ「yLeaf(ワイリーフ)」をApplib様サイトにてご紹介頂きました。
Appliv(アプリヴ) -iPhoneアプリが探せる、見つかる

yLeafの魅力を詳細にご紹介頂いておりますので、是非ご覧ください。
レビューワー様、誠に有り難うございました。

現在、無料版のyLeaf Liteを申請中です。
広告が表示されますが、製品版の全機能を利用する事ができますので、こちらも楽しみにお待ち下さいませ。
メモリを圧迫するから「今」必要の無いサイトを仕方なく閉じるけれど、いざ必要となった時に大量にあるブックマークから一々探して開くのが面倒くさい!
と感じた事はありませんか?

yLeaf(ワイリーフ)はそんな方の為に開発されたiPhone/iPadユニバーサルのWebブラウザアプリです。

350円
(2013.02.06時点)
posted with ポチレバ
公式サイト:

yLeafは次の特徴を持ちます。

1. 強力なグループ管理機能 
yLeafでは1つの仕事として開くサイトの集合を「グループ」と呼んでいます。
グループはフォルダ内に収めることでさらに分かりやすく管理することが可能です。
フォルダはいくつでも作成可能であり、さらにフォルダ内にフォルダを作成することも可能です。
フォルダごとまとめて違うグループ内に移動するなど、強力にグループ管理をサポートします。 
また、グループやフォルダにパスワードロックを設定する事も可能です。 

2. 複数のサイトを同時読み込み、瞬間切り替え 
グループを開くと、登録されているすべてのサイトが同時に読み込まれます。
各サイトはタブによって管理され、見たいサイトのタブをタップするだけで簡単に切り替えることが可能です。
また、グループ内のサイト追加や並べ替えなども簡単に行えます。 

3. デバイスの縦・横両対応 
yLeafのすべての画面が縦・横方向両対応です。
サイトによって適したデバイスの向きでご利用いただけます。 

4. 直感的なアイコンメニュー 
yLeafでは、各種操作を直観的にわかりやすいアイコン付きで表現しています。
アイコンの下には文章での説明もついていますので、操作に迷うことがありま-
せん。 

5. 好みのテーマで気持ち良い環境を 
フルカラーの中から、好みの1色をテーマとして使用することができます。
yLeafをあなた専用の色でカスタマイズし、お楽しみください。