0

新しいiPhone5の画面の高さに対応するのに問題があります。広告を表示するには、テーブルビューのサイズを変更する必要があります。

iOS6までは問題ありませんでしたが、以下の機能を使用していましたが、スケールは使用していません。正直なところ、私はそれが機能することに驚いています。

+ (CGRect)setTableBoundsByHeight:(int)lHeight:(UITableView*)tbl {
    CGRect tableFrame = tbl.frame;
    return CGRectMake(tableFrame.origin.x,
                      tableFrame.origin.y,
                      tableFrame.size.width,
                      lHeight);
}

これがコードです。テーブルビューの高さを367にハードコーディングしました。これは、ナビゲーションコントローラーとタブバーの高さを引いたものです。50は広告の高さです。

if (!productPurchased) {
#ifdef VER_FREE  
    [[LARSAdController sharedManager] 
           addAdContainerToView:self.view withParentViewController:self];
    [[LARSAdController sharedManager] 
           setGoogleAdPublisherId:@"number"];
    [reportTableView setFrame:[General 
           setTableBoundsByHeight:(367-50):reportTableView]];
#endif
} else {
    [reportTableView setFrame:[General 
           setTableBoundsByHeight:367:reportTableView]];
}

スケーリングするコードをいくつか見つけましたが、これを実装する方法がわかりません。

CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
4

3 に答える 3

0

スケールを無視すると、自動的にスケーリングされます。iPhone 5かどうかを確認し、高さを変えてください。ただし、iphone5のピクセル数/ 2を使用すると、2倍に拡大縮小されます。

于 2012-09-23T15:47:58.937 に答える
0

このコードがViewController内にある場合self.view.bounds.heightは、367ではなく使用してください。

ちなみに:あなたは本当に名前を変更する必要があります

+ (CGRect)setTableBoundsByHeight:(int)lHeight:(UITableView*)tbl

のようなものに

+ (CGRect)setTableBoundsByHeight:(int)lHeight tableView:(UITableView *)tbl
于 2012-09-23T16:00:06.767 に答える
0

ハードコードされた値(別名「マジックナンバー」)を使用するのは間違った習慣です。その理由がわかります。常に定数または実行時に計算された値を使用することをお勧めします。さらに、定数を使用することで、どこからともなく発生する「マジックナンバー」ではなく、数字が何に対応するかがわかるため、コードが読みやすくなります。

したがって、問題については、以下のこの種のコードを使用して、実行時に高さの値を計算します。

// simply use the height of the current viewController's `view`
// which is probably the view of the `navigationController`'s `topViewController`
// and is already at the correct size, namely 367 in iPhone 3.5" and 455 in iPhone 4".
CGFloat screenHeight = self.view.height;
if (!productPurchased)
{
  static CGFloat advertHeight = 50;
#ifdef VER_FREE  
  [[LARSAdController sharedManager] 
       addAdContainerToView:self.view withParentViewController:self];
  [[LARSAdController sharedManager] 
       setGoogleAdPublisherId:@"number"];
  [reportTableView setFrame:[General 
       setTableBoundsByHeight:(screenHeight-advertHeight):reportTableView]];
#endif
} else {
  [reportTableView setFrame:[General 
       setTableBoundsByHeight:screenHeight:reportTableView]];
}

使用可能なスペースに応じてビューのサイズを変更するため、自分で減算を行う必要はないことに注意してください。UIViewControllersたとえば、UITabBarControllerを含むがスタックの一番上にUINavigationController表示される場合、この最後の高さはUIViewControllerviewControllerviewは、画面の高さからtabBar、statusBar、navBarの高さを引いたものになります。

したがって[UIScreen mainScreen].applicationFrame、たとえばをフェッチして、tabBar(存在する場合)とnavBarの高さを減算して367ptの値にする代わりに、viewController'sの高さをview直接使用すると、正しい値を直接取得する必要があります。


追記:2番目の引数にプレフィックスを付ける必要があります。したがって、2番目の引数にプレフィックスがない場合は、メソッドsetTableBoundsByHeight:tableView:に名前を付けてください。setTableBoundsByHeight::(これも示唆している@MrMageの回答を参照してください)。

メソッドのより適切な命名は、setHeight:forTableView:たとえば、Appleの命名規則にぴったり合うようにすることです。

于 2012-09-23T16:17:47.550 に答える