UITableView тени сверху и снизу - PullRequest
6 голосов
/ 10 июня 2011

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

Там жев приложении «Часы» с пользовательским фоном (синяя линия с картой мира), поэтому можно использовать UITableView, я думаю ...

Вот что у меня есть с моим веб-представлением, и что я быхотел бы добавить к представлению таблицы.Мой веб-просмотр:

enter image description here

Поэтому я добавил свой собственный фон (светло-серая текстура).Ниже приведен другой вид, в котором я добавил тот же фон, но, как вы можете видеть, тени нет ... Это не встроенный эффект, как UIScrollView, я думаю.Есть ли способ сделать то же самое с представлением таблицы?

Представление моей таблицы:

enter image description here

ОБНОВЛЕНИЕ 1:

Я нашел эту замечательную статью Тени UITableView , но для нижней части вида тени нет.

Ответы [ 4 ]

3 голосов
/ 05 августа 2015

Вот мой код в Swift, я думаю, он хорошо работает:

func shadowView (view : UIView , r : CGFloat, gr : CGFloat , b : CGFloat , header : Bool)
    {
        let bottomColor = UIColor (red: r/255 , green: gr/255 , blue: b/255 , alpha: 0)

        //var bottomColor = UIColor ( red: (r/255), green : (g/255), blue : (b/255), alpha : 0)
        //var topColor = UIColor ( red: (r/255), green : (g/255), blue : (b/255), alpha : 1)
        let topColor = UIColor (red: r/255, green: gr/255, blue: b/255, alpha: 1)
        var arrayColors: [CGColor] = [
            topColor.CGColor,
            bottomColor.CGColor
        ]

        if header
        {
            let headerShadow: CAGradientLayer = CAGradientLayer()

            headerShadow.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: view.frame.size.height)
            headerShadow.colors = arrayColors
            view.layer.insertSublayer(headerShadow, atIndex: 1)
        } else
        {
            let footerShadow: CAGradientLayer = CAGradientLayer()

            arrayColors  = [
                bottomColor.CGColor,
                topColor.CGColor
            ]
            footerShadow.frame = CGRect(x: 0, y: 0 , width: UIScreen.mainScreen().bounds.width, height: view.frame.size.height)
            footerShadow.colors = arrayColors
            view.layer.insertSublayer(footerShadow, atIndex: 1)
        }
    }
3 голосов
/ 10 июня 2011

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

myView.layer

В документации CALayers есть несколько свойств, которые управляют тенью. Вы должны быть в состоянии сказать слою панели навигации отбрасывать тень. Наряду со слоями любого другого контента, который вы хотите отбросить тень.

myView.layer.shadowOffset
myView.layer.shadowRadius

Для доступа к этому свойству вам необходимо обязательно добавить платформу QuartzCore в свой проект.

2 голосов
/ 10 июня 2011

Это работает как для UITableViewController, так и для UIViewController.В моем viewDidLoad: я использую следующий код:

[self.view addSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shadow.png"]]];

Это добавит тень прямо под панелью навигации.

И это моя тень, которую я бросил вместе в Photoshop:

shadow@2x.png: enter image description here

0 голосов
/ 23 января 2012

Мой код.Например, для тени в нижнем колонтитуле:

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,tableView.bounds.size.width, 11)];

    UIImageView *shadow = [[UIImageView alloc] initWithImage:[UIImage 
                                                  imageNamed:@"tableHeaderBottom"]];
    [shadow sizeToFit];
    [footerView addSubview:shadow];

    return footerView;
}

- (void)viewDidLoad
{
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, -11, 0)];
    [super viewDidLoad];
}

Изображения:Normal image Retina image

Для заголовка: используйте тот же код, но просто переверните изображение по вертикали и используйте viewForHeaderInSection в первом разделе (0).

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