Domanda

Quando si utilizza UISplitViewController sull'iPad è presente una linea divisoria verticale nera tra la visualizzazione radice e quella dettagliata.C'è un modo per rimuovere questa linea?

Grazie

È stato utile?

Soluzione 7

Mi sono guardato intorno per un po ', e sono giunto alla conclusione che non c'è nessun modo per fare questo, non quello di creare il proprio vista suddivisa personalizzata.

Altri suggerimenti

Ottima risposta da @bteapot. Ho provato questo e funziona, anche si libera della linea tra master / dettaglio barre nav.

E 'possibile fare questo in storyboard aggiungendo il "gutterWidth" percorso della chiave e il valore 0 per gli attributi di runtime USplitViewController.

 entrare descrizione dell'immagine qui

In realtà ho qualche modifica a cui rispondere (Dylan)è la risposta

nell'appDelegate dobbiamo aggiungere l'immagine nel controller spliteview anziché nella finestra

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]];  

qui self è oggetto di AppDelegate.

ora applica la risposta di questo thread: iPhoneOS SDK - Rimozione dell'arrotondamento degli angoli dalle viste (problema con iPad) risposta di (addominali)

la modifica nella risposta del post sopra è

-(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;
}

** Rendi imgview.hidden a false dichiarare imgview al file appdlegate.h **

e non dimenticare di chiamarlo

-(void)didRotateFromInterfaceOrientation:
        UIInterfaceOrientation)fromInterfaceOrientation
{
    [yourAppDelegate performSelector:@selector(fixRoundedSplitViewCorner) 
          withObject:NULL afterDelay:0];
}

Chintan adatiya risposta coperte solo gli angoli e la barra di navigazione, ma ho trovato un trucco come coprire la linea tra il Maestro e la vista dettagliata.

Non è bello, ma funziona come un fascino.

  1. Innanzitutto creare un'immagine che è 1 px di larghezza e 704 pixel.

  2. Negli didFinishLaunchingWithOptions aggiungere il seguente codice:

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

E fatto.

Quando si desidera un'immagine di sfondo che è continua creazione di 3 immagini:

  • Master: Larghezza: 320, Altezza: 704
  • Dettaglio: Larghezza: 703, Altezza: 704
  • Divisori: larghezza: 1, altezza: 704

In primo post qui, ciao a tutti.

ho scoperto come si fa per caso ... quando ho cercato di trovare il motivo per cui avevo perso la linea di divisione. Ecco come nasconderlo, se siete ancora interessati:

1) A vostro parere Dettaglio (destra), assicuratevi di avere una visualizzazione secondaria che attraversa l'intera vista.

2) Offset questa vista visualizzazione secondaria a (-1, 0).

3) Assicurarsi che la vista di dettaglio ha la sua opzione "clip subviews" incontrollato.

Voilà, godere.

E 'possibile per lo sbarazzarsi di esso impostando un'altra immagine dietro di esso in vista della finestra principale. Questo è dal didFinishLaunchingWithOptions app delegato

// 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];

Ma lascia ancora due artefatti visivi nella parte superiore e la parte inferiore che sembrano essere personalizzato disegnato dal splitviewcontroller.

È interessante notare che, nel app che sto lavorando su Voglio un colore di sfondo nero per entrambe le viste nella UISplitViewController. Mi piacerebbe cambiare il colore della linea di divisione al bianco (in modo che si può vedere). Rendere entrambi i colori di sfondo nero è un modo per sbarazzarsi di (rendere invisibile) la linea che divide, ma che probabilmente non è una soluzione per la maggior parte delle persone.

Prova il MGSplitViewController da Matt Gammell

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

I può essere in ritardo qui, ma I DO hanno una soluzione che funziona. Funziona anche per iOS 8+ splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible ; e senza scivoli dentro e fuori quando si preme il pulsante di attivazione Schermo intero.

Ecco il trucco:

prima di sottoclasse UISplitViewController.m

Nell'intestazione aggiungere il follwing:

@property (strong, nonatomic) UIView *fakeNavBarBGView;

viewDidLoad metodo di aggiungere il seguente codice:

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 aggiungere la seguente:

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

Ora qui è il trucco finale: nel DetailViewController.m , aggiungere il seguente nel metodo viewDidLoad (chiamato ogni volta che si fa clic sul tavolo Master):

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

Esegui e guardare la magia; -)

API privato (può causare App Store rifiuto):

[splitViewController setValue:@0.0 forKey:@"gutterWidth"];

Testato su iOS10 (probabilmente funziona su iOS9 troppo).

splitviewController.view.backgroundColor = UIColor.white

rimuove divisore. Apparentemente divisore è solo un divario tra master e dettaglio contenitore.

Ho fatto questo sbaglio impostando la proprietà backgroundColor di vista del primo viewController -. Forse per clearColor, non mi ricordo adesso

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top