UISplitViewController: удалить разделительную линию - PullRequest
18 голосов
/ 07 апреля 2010

При использовании UISplitViewController на iPad существует черная вертикальная разделительная линия между корнем и подробным видом Есть ли способ удалить эту строку?

Спасибо

Ответы [ 13 ]

10 голосов
/ 30 ноября 2016

Отличный ответ от @bteapot. Я проверил это, и оно работает, даже избавляется от границы между панелями навигации мастера / детализации.

Вы можете сделать это в раскадровке, добавив путь к ключу "gutterWidth" и значение 0 к атрибутам среды выполнения USplitViewController.

enter image description here

10 голосов
/ 28 сентября 2011

На самом деле у меня есть некоторые изменения, чтобы ответить (Дилан) ответ

в appDelegate нам нужно добавить изображение в контроллер сплитвью, а не в окно

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];
}
6 голосов
/ 05 января 2012

Ответ chintan adatiya охватывает только углы и навигационную панель, но я нашел хитрость в том, как покрыть линию между представлением Master и Detail.

Это не красиво, но работает как шарм.

  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
5 голосов
/ 26 апреля 2011

Первый пост здесь, всем привет.

Я обнаружил, как это сделать случайно ... когда я попытался выяснить, почему я ПОТЕРЯЛ разделительную линию. Вот как это скрыть, если вам все еще интересно:

1) В представлении «Подробности» (справа) убедитесь, что у вас есть подпредставление, охватывающее весь вид.

2) Сместить это подпредставление к (-1, 0).

3) Убедитесь, что в подробном представлении не включена опция «Клип подпредставлений».

Вуаля, наслаждайся.

3 голосов
/ 21 июня 2010

В основном вы можете избавиться от него, установив другое изображение позади него в представлениях главного окна. Это из приложения делегата 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];

Но он по-прежнему оставляет два визуальных артефакта сверху и снизу, которые, по-видимому, настраиваются контроллером splitview.

2 голосов
/ 30 октября 2010

Интересно, что в приложении, над которым я работаю, я хочу черный цвет фона для обоих представлений в UISplitViewController.Я хотел бы изменить цвет разделительной линии на белый (чтобы вы могли это видеть).Создание обоих цветов фона черным является одним из способов избавиться (сделать невидимым) разделительную линию, но это, вероятно, не решение для большинства людей.

1 голос
/ 10 февраля 2017

Протестировано на iOS10 (возможно, будет работать и на iOS9).

splitviewController.view.backgroundColor = UIColor.white

удаляет разделитель. Видимо, делитель - это просто разрыв между основным и подробным контейнером.

1 голос
/ 15 января 2016

Частный API (может привести к отказу в App Store):

[splitViewController setValue:@0.0 forKey:@"gutterWidth"];
1 голос
/ 30 октября 2014

Я могу опоздать, но У меня есть решение, которое работает. Это даже работает для iOS 8+ 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];

Запустите его и наблюдайте за магией; -)

1 голос
/ 04 февраля 2011

Попробуйте MGSplitViewController от Мэтта Гаммелла

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...