2009-07-09 5 views
31

Каков наилучший способ обойти углы по всему UITableView, как видно из запаса и прожектора? Сгруппированный стиль не решает проблему, потому что круглые углы прокручиваются вместе с ячейкой. Я пытаюсь закрепить изображение так, чтобы углы всегда круглые, независимо от положения прокрутки.Круглые углы на UITableView

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

+0

Не могу поверить, что этот семилетний вопрос все еще привлекает внимание. Я давно отказался от этой функции, извините, я не могу самостоятельно протестировать и принять какие-либо ответы. Я вижу много чеков, спасибо, спасибо! Я рад видеть, что это было полезно. – Scrollwheelie

ответ

2

Вы пробовали «сгруппированный» стиль стола?

self.tableView.style = UITableViewStyleGrouped; 

Для получения дополнительной информации см. Table View Programming Guide. В главе «О таблицах» есть несколько скриншотов, описывающих разные стили.

+1

Когда вы прокручиваете стол вверх, он будет замаскировать его закругленными углами, я думаю, именно это он и имеет в виду. Хотя это было бы хорошим началом, я думаю, и сделать фон прозрачным. – Garrett

+0

Да, похоже, что ты на правильном пути с этим. –

+0

@Garrett: Ох .. Просто запустил приложение для своих акций и посмотрел, что вы имеете в виду. На самом деле этого эффекта до сих пор не заметил.;-) Извините за шум, я думал, что он имел в виду простые сгруппированные представления таблиц. –

4

Другой способ заключается в маскировке UITableView с использованием Core Graphics. Пример маскировки UIView можно найти здесь: http://iphonedevelopment.blogspot.com/2008/11/creating-transparent-uiviews-rounded.html

+0

Это очень помогло, но оно не обрезает ячейки, когда они прокручиваются мимо обрезанной области самого UITableView. – Scrollwheelie

64

Это старый вопрос, но, возможно, вы все еще хотите знать, как это сделать.

Я воспроизвел таблицуView, как в Stocks/Spotlight. Хитрость заключается в том

view.layer.cornerRadius = 10; 

Для этого, чтобы работать, вы должны включить QuartzCore в класс, который вы называете это свойство:

#import <QuartzCore/QuartzCore.h> 

Я слышал, что это работает только начиная с OS 3.0. Но поскольку мое приложение использует основные данные, это не проблема, потому что это было уже для OS 3.0 и hight.

Я создал пользовательский UIView с подвид с cornerRadius 10 и с

view.backgroundColor = [UIColor clearColor]; 

Тогда вы должны разместить UITableView сгруппированных стиль в этом подвид. Вам необходимо установить backgroundColor на clearColor и separatorColor на clearColor. Затем вам нужно поместить табличное представление внутри закругленного углового вида, это делается путем установки размера кадра и начала координат. Мой loadView класс моего пользовательского UIView выглядит следующим образом:

self.view = [[UIView alloc] init]; 
self.view.backgroundColor = [UIColor clearColor]; 

CustomUIViewClass *scherm = [[CustomUIViewClass alloc] init]; 

CGRect frame; 
frame.origin.x = 10; 
frame.origin.y = 50; 
frame.size.width = 300; 
frame.size.height = 380; 

scherm.frame = frame; 
scherm.clipsToBounds = YES; 
scherm.layer.cornerRadius = 10; 

[self.view addSubview:scherm]; 

CustomUITableViewClass *table = [[CustomUITableViewClass alloc] initWithStyle:UITableViewStyleGrouped]; 

frame.origin.y = -10; 
frame.origin.x = -10; 
frame.size.width = 320; 
frame.size.height = 400; 

table.tableView.frame = frame; 
[scherm addSubview:table.tableView]; 

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

+0

Это единственное решение из множества тестируемых мной решений в сентябре 2010 года, которое отлично работает на iOS 4 и iOS 3.2 и имеет отличную производительность. Интеграция его в мои приложения. Спасибо, Ханс! – DenTheMan

2

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

Я создал прямоугольный UIView с ясным, закругленным углом интерьера, а затем положил его поверх UITableView. Вы можете найти полное описание на my programming blog.

Он работает именно так, как я хочу. Надеюсь, это поможет.

6

Вот решение, с которым я столкнулся. Он сочетает в себе маску слоя и слой cornerRadius. iPhone OS 3.x только. Я не тратил времени, пытаясь заставить работать прокрутки, но я думаю, что это не должно быть слишком сложно.

http://github.com/beetlebugorg/RoundedUITableView

+0

Ницца, спасибо за обмен! Проект демонстрирует все это, но основной материал изолирован в RoundedUITableView, отлично. Считаете ли вы, что это будет поддерживать ландшафтный режим без усилий? :/ – yonel

+0

Использование 'CALayer.mask' сделало трюк для меня. Мне нужно поддерживать навигация для навигации, поэтому я создал маску, которую я мог бы установить на navigationController.view. Просто установка tableView.layer.cornerRadius в этом случае не работает. –

55

Простой способ сделать это, чтобы просто импортировать рамки QuartzCore к вашему проекту. #import <QuartzCore/QuartzCore.h> к вашему tableViewController и просто установить

myTableView.layer.cornerRadius=5; 

Это даст вам закругленные углы без необходимости добавить TableView к SuperView или прикрепив ее.

+3

отлично !, легко и прямо к делу !, спасибо – MaKo

+3

Это сработало хорошо для меня. спасибо – ilyashev

2

Ну, есть много способов решить эту проблему.

Однако, в моем случае все работает неправильно. Мой стол иногда меньше, чем размер таблицы.

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

Сделать первый и последний округленым.

  • Создать CAShapeLayer для верхней части (слева | справа) и снизу (слева | справа).

    shapeTop = [CAShapeLayer layer]; 
    shapeTop.path = [UIBezierPath 
    bezierPathWithRoundedRect:CGRectMake(0.0f, 0.0f, 306.0f, 58.0f) 
    byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight 
    cornerRadii:CGSizeMake(6.0f, 6.0f)].CGPath; 
    
    shapeBottom = [CAShapeLayer layer]; 
    shapeBottom.path = [UIBezierPath 
    bezierPathWithRoundedRect:CGRectMake(0.0f, 0.0f, 306.0f, 58.0f) 
    byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight 
    cornerRadii:CGSizeMake(6.0f, 6.0f)].CGPath; 
    
  • Стол должен быть прозрачным, прозрачным;

  • Клетки должны быть цветным фоном;
  • Установите layer.mask его

    UIView* backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; 
    backgroundView.backgroundColor = [UIColor whiteColor]; 
    cell.backgroundView = backgroundView; 
    
  • Не забудьте #import <QuartzCore/QuartzCore.h>

13

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

В Interface Builder:

  • Установить стиль UITableView на равнину и сделать кадр с некоторой проклейкой на левом и правом, возможно, с й = 10 и шириной = 300.

Затем установите угол радиус и цвет сами:

#import <QuartzCore/QuartzCore.h> 

self.tableView.layer.borderColor = [UIColor colorWithWhite:0.6 alpha:1].CGColor; 
self.tableView.layer.borderWidth = 1; 
self.tableView.layer.cornerRadius = 4; 
+0

Чисто! Просто! выглядит отлично. Мне это нравится! – clearlight

0

Ниже код для Swift версии:

let redColor = UIColor.redColor() 
self.tableView.layer.borderColor = redColor.colorWithAlphaComponent(0.9).CGColor 
self.tableView.layer.borderWidth = 1; 
self.tableView.layer.cornerRadius = 4; 

Убедитесь, что у вас есть import QuartzCore в разделе импорта.

Смежные вопросы