При использовании UISplitViewController на iPad есть черная вертикальная разделительная линия между корневым и подробным представлением. Есть ли способ удалить эту строку?
Спасибо
При использовании UISplitViewController на iPad есть черная вертикальная разделительная линия между корневым и подробным представлением. Есть ли способ удалить эту строку?
Спасибо
Я некоторое время огляделся и пришел к выводу, что theres не имеет никакого отношения к этому, кроме создания собственного пользовательского разделенного представления.
Отличный ответ от @bteapot. Я проверил это, и оно работает, даже избавляется от границы между панелями навигации мастера/детализации.
Вы можете сделать это в раскадровке, добавив путь к ключу "gutterWidth" и значение 0 в атрибуты среды выполнения USplitViewController.
Фактически у меня есть некоторая модификация ответа (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];
}
Ответ 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 изображения:
Первое сообщение здесь, привет всем.
Я обнаружил, как это сделать случайно... когда я попытался найти причину, по которой я потерял разделительную линию. Вот как скрыть это, если вы все еще заинтересованы:
1) В вашем представлении "Детали" (справа) убедитесь, что у вас есть подпункт, охватывающий весь вид.
2) Сдвиньте это представление под просмотр (-1, 0).
3) Убедитесь, что в "Детском представлении" опция "Подхваты клипа" не отмечена.
Воила, наслаждайся.
Вы можете в основном избавиться от него, установив другое изображение позади него в виде главного окна. Это из делегата приложения 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.
Интересно, что в приложении, над которым я работаю, мне нужен черный цвет фона для обоих представлений в UISplitViewController. Я хотел бы изменить цвет линии делителя на белый (чтобы вы могли видеть его). Сделать оба цвета фона черными - это один из способов избавиться от (сделать невидимым) разделительную линию, но это, вероятно, не решение для большинства людей.
Мне любопытно посмотреть, как обработчики приложений будут справляться с этим. Прежде чем я вложил значительные средства в извлечение разделителя, я бы посоветовал HIG для iPad, чтобы убедиться, а затем спросить самих рецензентов. Я могу рассказать вам по своему опыту, что они более строгие в отношении требований iPad, чем iPhone, и это говорит о многом.
Попробуйте MGSplitViewController от Matt Gammell
http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad
Возможно, я опаздываю здесь, но Я 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];
Запустить его и посмотреть волшебство; -)
Частный API (может вызвать отказ в App Store):
[splitViewController setValue:@0.0 forKey:@"gutterWidth"];
Протестировано на iOS10 (возможно, будет работать и на iOS9).
splitviewController.view.backgroundColor = UIColor.white
он удаляет разделитель. По-видимому, разделитель - это просто промежуток между контейнером мастера и детали.
yourSplitViewController.view.backgroundColor = [UIColor redColor];
Меня устраивает.
Я сделал это случайно, установив свойство backgroundColor первого представления viewController - возможно, чтобы clearColor, я не помню сейчас.
UIManager.put( "SplitPaneDivider.draggingColor", новый цвет (255, 255, 255, 0));