47 votes

Changer la largeur de maître dans UISplitViewController

L'iPad guide de programmation dit que l'écran à double affichage splitview du volet de gauche est fixé à 320 points. Mais 320 pixels pour mon maître-vue-contrôleur est de trop. Je tiens à le réduire et de donner plus d'espace à la vue de détail du contrôleur. Est-il possible de toute façon?

Edit: Lien vers le document qui parle de largeur fixe .

Merci et Salutations, Raj

65voto

jrc Points 1834

Si vous sous-classez UISplitViewController, vous pouvez implémenter -viewDidLayoutSubviews et ajuster la largeur à cet endroit. C'est propre, pas de piratage ou API privée, et fonctionne même avec la rotation.

 - (void)viewDidLayoutSubviews
{
    const CGFloat kMasterViewWidth = 240.0;

    UIViewController *masterViewController = [self.viewControllers objectAtIndex:0];
    UIViewController *detailViewController = [self.viewControllers objectAtIndex:1];

    if (detailViewController.view.frame.origin.x > 0.0) {
        // Adjust the width of the master view
        CGRect masterViewFrame = masterViewController.view.frame;
        CGFloat deltaX = masterViewFrame.size.width - kMasterViewWidth;
        masterViewFrame.size.width -= deltaX;
        masterViewController.view.frame = masterViewFrame;

        // Adjust the width of the detail view
        CGRect detailViewFrame = detailViewController.view.frame;
        detailViewFrame.origin.x -= deltaX;
        detailViewFrame.size.width += deltaX;
        detailViewController.view.frame = detailViewFrame;

        [masterViewController.view setNeedsLayout];
        [detailViewController.view setNeedsLayout];
    }
}
 

36voto

SJTriggs Points 14

Dans IOS 8.0, vous pouvez facilement le faire en procédant comme suit:

  1. Dans votre MasterSplitViewController.h, ajoutez

    @property (nonatomic, assign) CGFloat maximumPrimaryColumnWidth NS_AVAILABLE_IOS (8_0);

  2. Dans votre méthode MasterSplitViewController.h viewDidLoad, ajoutez

    self.maximumPrimaryColumnWidth = 100; self.splitViewController.maximumPrimaryColumnWidth = self.maximumPrimaryColumnWidth;

C’est une fonctionnalité vraiment géniale, simple et facile d’IOS 8.

22voto

priyanka Points 1751

ce code est un travail pour moi

 [splitViewController setValue:[NSNumber numberWithFloat:200.0] forKey:@"_masterColumnWidth"];
 

12voto

KennyTM Points 232647

Non.


Il y a deux propriétés privées

 @property(access,nonatomic) CGFloat masterColumnWidth;
@property(access,nonatomic) CGFloat leftColumnWidth; // both are the same!
 

mais étant privé, ils ne peuvent pas être utilisés pour les applications AppStore.

11voto

Gregor Points 625

Pourquoi ne pas essayer l'excellent MGSplitViewController de Matt Gemmell? C'est open source, et est disponible sur GitHub .

Gregor, Suède

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X