iOS: добавление фиксированного изображения чуть ниже панели навигации - PullRequest
3 голосов
/ 29 мая 2011

Такое ощущение, что это должно быть довольно просто, но ничего из того, что я пробовал до сих пор, не работает. В двух словах, я хочу добавить фиксированное изображение чуть ниже панели навигации в UITableViewController, который я создаю программно. Другими словами, я хочу, чтобы изображение оставалось чуть ниже панели навигации, даже когда пользователь прокручивает вверх и вниз представление таблицы (это в основном пользовательская тень для панели навигации).

Самым близким, что я получил, является приведенный ниже код (в методе init UITableViewController), который добавляет изображение, но не препятствует его перемещению при прокрутке пользователя.

// Add nav bar drop shadow
UIImage *dropShadowImage = [UIImage imageNamed:@"NavBarDropShadow.png"];
UIImageView *dropShadowView = [[UIImageView alloc] initWithImage:dropShadowImage];
[self.view addSubview:dropShadowView];

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

Ответы [ 5 ]

2 голосов
/ 29 мая 2011

РЕДАКТИРОВАТЬ: IOS5 имеет лучший способ сделать это. Пожалуйста, ознакомьтесь с новым UIAppearance протоколом.

Добавление этого блока кода в ваш код позволит вам нарисовать тень на всех UINavigationBars в приложении. Это лучшее решение, чем добавление тени в виде UIImageView:

@implementation UINavigationBar (ShadowBar)
- (void)drawRect:(CGRect)rect {
    //draw the shadow ui nav bar
    UIImage *image = [UIImage imageNamed: @"UINavBarWithShadow.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

- (void)layoutSubviews {
    self.frame = CGRectMake(0, 0, self.frame.size.width, 300);
}
@end

Чтобы сделать UINavigationBar выше и, таким образом, не обрезать ваш контент, переопределите layoutSubviews и установите нужный кадр (код выше предполагает, что ваш заголовок имеет высоту 300 пунктов). layoutSubviews по умолчанию ничего не делает, но вызывается "lazy" перед планированием представления.

Для получения дополнительной информации об этих пользовательских переопределениях размера / вида, которые применяются к UIView (и любому другому подклассу), посмотрите здесь

2 голосов
/ 29 мая 2011

Вы можете создать подкласс или категорию на UINavigationBar, и он может добавить изображение в методы init или drawRect.Если вы думаете об этом, вы пытаетесь добавить тень на панель навигации, а не на UITableView, поэтому имеет смысл изменить панель навигации, а не таблицу.

0 голосов
/ 29 мая 2011

Не делайте UITableView основным видом, т.е. розетка view, установите для нее значение UIView, содержащее UITableView, затем сделайте свой контроллер подклассом UIViewController и сделайте его соответствующим UITableViewDataSource и UITableViewDelegate. в своем кончике настройте вид так, чтобы у вас был UIImageView вверху и UITableView внизу. и установите delegate и datasource на file's owner.

0 голосов
/ 29 мая 2011

Посмотрите на этот похожий вопрос, на который я ответил некоторое время назад. Он должен делать именно то, что вы хотите с небольшой настройкой.

Прозрачный вид в верхней части UITableView

0 голосов
/ 29 мая 2011

Вы добавляете свой dropShadowView в self.view, который в вашем случае является представлением UITableViewController. Это означает, что ваш self.view является UITableView, поэтому при прокрутке вверх и вниз вы также прокручиваете dropShadowView, поскольку он находится внутри tableView.

Попробуйте написать собственный UIViewController и добавить два подпредставления: одно - dropShadowView, а другое - ваша таблица.

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