18

iPadでUISplitViewControllerを使用する場合、ルートビューと詳細ビューの間に黒い垂直の仕切り線があります。この行を削除する方法はありますか?

ありがとう

4

13 に答える 13

13

@bteapotによる優れた回答。私はこれをテストしました、そしてそれは動作します、マスター/詳細ナビゲーションバーの間の線さえ取り除きます。

USplitViewControllerランタイム属性に「gutterWidth」キーパスと値0を追加することにより、ストーリーボードでこれを行うことができます。

ここに画像の説明を入力してください

于 2016-11-30T20:06:43.590 に答える
10

実際、私は(ディラン)の答えの答えにいくつかの変更があります

appDelegateで、ウィンドウではなくspliteviewコントローラーに画像を追加する必要があります

self.splitViewController.view.opaque = NO;  
imgView = [[UIImageView alloc] initWithImage:
        [UIImage imageNamed:@"FullNavBar.png"]];  
[imgView setFrame:CGRectMake(0, 0, 1024, 44)];  
[[self.splitViewController view] insertSubview:imgView atIndex:0]; 
[[self.splitViewController view] setBackgroundColor:[UIColor clearColor]];  

ここで、selfはAppDelegateのオブジェクトです。

今このスレッドの答えを適用します:iPhoneOS SDK-ビューからコーナーの丸めを削除します(iPadの問題)(abs)による答え

上記の投稿の答えを編集してください

-(void) fixRoundedSplitViewCorner {  
     [self explode:[[UIApplication sharedApplication] keyWindow] level:0];  
}  
-(void) explode:(id)aView level:(int)level 
{

    if ([aView isKindOfClass:[UIImageView class]]) {
        UIImageView* roundedCornerImage = (UIImageView*)aView;
        roundedCornerImage.hidden = YES;
    }
    if (level < 2) {
        for (UIView *subview in [aView subviews]) {
            [self explode:subview level:(level + 1)];
        }
    }

    imgView.hidden = FALSE;
}

**imgView.hiddenをFALSEに設定してimgViewをAppDelegate.hファイルに宣言します**

そしてこれを呼び出すことを忘れないでください

-(void)didRotateFromInterfaceOrientation:
        UIInterfaceOrientation)fromInterfaceOrientation
{
    [yourAppDelegate performSelector:@selector(fixRoundedSplitViewCorner) 
          withObject:NULL afterDelay:0];
}
于 2011-09-27T20:12:45.167 に答える
6

chintan adatiyaの回答は、コーナーとナビゲーションバーのみをカバーしていますが、マスタービューと詳細ビューの間の線をカバーする方法を見つけました。

それはいいことではありませんが、それは魅力のように機能します。

  1. まず、幅1ピクセル、高さ704ピクセルの画像を作成します。

  2. didFinishLaunchingWithOptionsに次のコードを追加します。

    UIView *coverView = [[UIView alloc] initWithFrame:CGRectMake(320, 44, 1, 704)];
    [coverView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"divider_cover.png"]]];
    
    [splitViewController.view addSubview:coverView];
    

そして完了。

継続する背景画像が必要な場合は、次の3つの画像を作成します。

  • マスター:幅:320、高さ:704
  • 詳細:幅:703、高さ:704
  • 仕切り:幅:1、高さ:704
于 2012-01-04T20:57:59.520 に答える
5

ここに最初の投稿、みなさん、こんにちは。

偶然にそれを行う方法を発見しました...なぜ私が仕切り線を失ったのかを見つけようとしたとき。まだ興味がある場合は、非表示にする方法は次のとおりです。

1)詳細(右側)ビューで、ビュー全体にまたがるサブビューがあることを確認します。

2)このサブビュービューを(-1、0)にオフセットします。

3)詳細ビューの[サブビューのクリップ]オプションがオフになっていることを確認します。

Voilà、お楽しみください。

于 2011-04-26T19:54:42.490 に答える
3

ほとんどの場合、メインウィンドウのビューでその背後に別の画像を設定することでそれを取り除くことができます。これはアプリデリゲートからですdidFinishLaunchingWithOptions

// Add the split view controller's view to the window and display.
splitViewController.view.opaque = NO;
splitViewController.view.backgroundColor = [UIColor clearColor];
[window addSubview:splitViewController.view];
[window insertSubview:bgImageView belowSubview:splitViewController.view];
[window makeKeyAndVisible];

ただし、splitviewcontrollerによってカスタム描画されたように見える2つの視覚的なアーティファクトが上部と下部に残ります。

于 2010-06-21T15:50:19.747 に答える
2

興味深いことに、私が取り組んでいるアプリでは、UISplitViewControllerの両方のビューに黒の背景色が必要です。仕切り線の色を白に変えたいのですが(見えるように)。両方の背景色を黒にすることは、境界線を取り除く(見えなくする)ための1つの方法ですが、それはおそらくほとんどの人にとって解決策ではありません。

于 2010-10-30T16:17:26.540 に答える
2

iOS10でテスト済み(おそらくiOS9でも動作します)。

splitviewController.view.backgroundColor = UIColor.white

仕切りを取り除きます。どうやらディバイダーはマスターコンテナとディテールコンテナの間のギャップにすぎません。

于 2017-02-10T15:33:56.413 に答える
1

しばらく見て回ったところ、独自のカスタム分割ビューを作成する以外に、これを行う方法はないという結論に達しました。

于 2010-06-05T18:44:24.907 に答える
1

MattGammellによるMGSplitViewControllerをお試しください

http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad

于 2011-02-04T07:54:46.957 に答える
1

私はここで遅れるかもしれませんが、はうまくいく解決策を持っています。iOS8以降でも機能しますsplitViewController.preferredDisplayMode=UISplitViewControllerDisplayModeAllVisible ; フルスクリーントグルボタンを押すと、シームレスにスライドインおよびスライドアウトします。

ここにトリックがあります:

最初のサブクラスUISplitViewController.m

ヘッダーに次を追加します:

@property (strong, nonatomic) UIView *fakeNavBarBGView;

viewDidLoadメソッドに次のコードを追加します。

CGFloat fakeNavBarWidth = 321; // It is important to have it span the width of the master view + 1 because it will not move when the split view slides it's subviews (master and detail)
CGFloat navbarHeight = self.navigationController.navigationBar.frame.size.height + 20;
self.fakeNavBarBGView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, fakeNavBarWidth, navbarHeight)];
self.fakeNavBarBGView.backgroundColor = [UIColor redColor];

// Add Fake navbar to back of view
[self.view insertSubview:self.fakeNavBarBGView atIndex:0];

// SplitView Controller
UISplitViewController *splitViewController = self;
DetailViewController *detailVC = [navigationController.viewControllers lastObject];

detailVC.fakeNavBarSubView = self.fakeNavBarBGView;
detailVC.SVView = self.view;

DetailViewController.hに、次を追加します。

@property (strong, nonatomic) UIView *SVView;
@property (strong, nonatomic) UIView *fakeNavBarSubView;

これが最後のトリックです:DetailViewController.mで、viewDidLoadメソッドに以下を追加します(マスターテーブルをクリックするたびに呼び出されます):

[self.SVView sendSubviewToBack:self.fakeNavBarSubView];
[self.SVView bringSubviewToFront:self.view];

それを実行し、魔法を見てください;-)

于 2014-10-30T10:34:55.777 に答える
1

プライベートAPI(App Storeの拒否を引き起こす可能性があります):

[splitViewController setValue:@0.0 forKey:@"gutterWidth"];
于 2016-01-15T17:54:39.953 に答える
-1

これは、最初のviewControllerのビューのbackgroundColorプロパティを誤って設定したためです。おそらくclearColorに設定されていますが、今は覚えていません。

于 2010-04-10T16:01:21.497 に答える
-3

UIManager.put( "SplitPaneDivider.draggingColor"、new Color(255、255、255、0));

于 2010-11-12T20:52:35.993 に答える