Подтвердить что ты не робот

UISplitViewController: удалить разделительную линию

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

Спасибо

4b9b3361

Ответ 1

Я некоторое время огляделся и пришел к выводу, что theres не имеет никакого отношения к этому, кроме создания собственного пользовательского разделенного представления.

Ответ 2

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

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

enter image description here

Ответ 3

Фактически у меня есть некоторая модификация ответа (Dylan)

в 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)

edit в вышеприведенном ответе

-(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 для ЛОЖЬ объявить imgView в файл AppDelegate.h **

и не забывайте называть это

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

Ответ 4

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

Это не приятно, но это работает как шарм.

  • Сначала создайте изображение шириной 1 px и высотой 704 пикселей.

  • В файле doneFinishLaunchingWithOptions добавьте следующий код:

    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

Первое сообщение здесь, привет всем.

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

1) В вашем представлении "Детали" (справа) убедитесь, что у вас есть подпункт, охватывающий весь вид.

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

3) Убедитесь, что в "Детском представлении" опция "Подхваты клипа" не отмечена.

Воила, наслаждайся.

Ответ 6

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

// Add the split view controller 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.

Ответ 7

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

Ответ 8

Мне любопытно посмотреть, как обработчики приложений будут справляться с этим. Прежде чем я вложил значительные средства в извлечение разделителя, я бы посоветовал HIG для iPad, чтобы убедиться, а затем спросить самих рецензентов. Я могу рассказать вам по своему опыту, что они более строгие в отношении требований iPad, чем iPhone, и это говорит о многом.

Ответ 10

Возможно, я опаздываю здесь, но Я DO имеет решение, которое работает. Он даже работает для iOS 8+ splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; и плавно скользит внутрь и наружу, когда вы нажимаете кнопку переключения Full Screen.

Вот трюк:

первый подкласс 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 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];

Запустить его и посмотреть волшебство; -)

Ответ 11

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

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

Ответ 12

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

splitviewController.view.backgroundColor = UIColor.white

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

Ответ 13

yourSplitViewController.view.backgroundColor = [UIColor redColor];

Меня устраивает.

Ответ 14

Я сделал это случайно, установив свойство backgroundColor первого представления viewController - возможно, чтобы clearColor, я не помню сейчас.

Ответ 15

UIManager.put( "SplitPaneDivider.draggingColor", новый цвет (255, 255, 255, 0));