Я хотел бы добавить заголовок в UIWebView
, похожий на адрес/строку поиска в MobileSafari и отличный Articles.app by Sophia Teutschler. Точнее, я хотел бы создать представление «вытащить для фиксации» над UIWebView, как в статьях. В статьях используется UIWebView, поэтому это кажется возможным. Есть ли способ сделать это без необходимости встраивать UIWebView
в UIScrollView
и обновлять его размер все время, как описано в this article? По-видимому, мне нужны прокручивающие события, чтобы вести «ориентацию по фиксации», соответственно.Добавление представления заголовка в UIWebView, похожее на Safari и статьи
ответ
После нескольких активности, которая я решил пойти с этим решением:
В основном я только добавил свой заголовок UIView как webview.scrollview подвид.
Чтобы избежать заголовка перекрывать вид браузера:
- цикл через все [webview.scrollView подвиды]
- взгляд на самый большой, которым должен содержит браузер (остальные для теней и линий)
изменить свою origin.y
вот код:
CGRect browserCanvas = web.bounds; for(int i=0; i< [[web.scrollView subviews] count]; i++) { UIView* subview = [[web.scrollView subviews] objectAtIndex:i]; CGRect f = subview.frame; NSLog(@"sub %d -> x:%.0f, y:%.0f, w:%.0f, h:%.0f", i, f.origin.x, f.origin.y, f.size.width, f.size.height); if(f.origin.x == browserCanvas.origin.x && f.origin.y == browserCanvas.origin.y && f.size.width == browserCanvas.size.width && f.size.height == browserCanvas.size.height) { f.origin.y = header.frame.size.height; subview.frame = f; } } if(![header superview]) { [web.scrollView addSubview:header]; [web.scrollView bringSubviewToFront:header]; }
Как насчет использования содержимогоInsets scrollView (и установите, что ваш кадр y будет отрицательным)? –
@kenji, который хорошо работает, как @Manesh подробнее в другом ответе. За исключением случая, когда ваш webView имеет элемент с положением css, установленным на 'fixed-top'. Если вы ожидаете широкого разнообразия веб-контента, вы столкнетесь с страницей с навигационной панелью с фиксированной точкой, поэтому предложение sosergio лучше всего работает. –
В статье не может быть использован UIWebView для отображения основного текста статьи. Для выполнения вашей задачи UIScrollView потребуется почти наверняка. Изменение размера его подзаголовков может не понадобиться. Проверьте образцы кода UIScrollView, предоставленные Apple.
Статьи почти наверняка используют 'UIWebView'. – MrMage
Я не мог сказать точно, но Twitter, похоже, использует UITableView
для достижения этого. Возможно, вы можете попытаться поместить свое представление в заголовок табличного представления и ваш контент в ячейке.
Вот интересный пример, который вы могли бы рассмотреть глядя на - How to make a Pull-To-Reload TableView just like Tweetie 2
Enormego опубликовал некоторые примеры код, чтобы сделать тянуть к обновлению вещь происходит:
https://github.com/enormego/EGOTableViewPullRefresh
Это действительно не так сложно , Вы можете получить панель заголовков Safari/Articles в стиле таблицы, просто создав свою панель заголовка и просто добавив ее в свой UITableView
в качестве подзаголовка. Я делаю точно, что на приложение я работаю сейчас:
GBSpendingMeter *meterView = [[[GBSpendingMeter alloc] initWithFrame:CGRectMake(0,0,320,44)] autorelease];
// The meterView will appear pinned to the top of the table, similar to a headerView
[self.tableView addSubview:meterView];
Хитрость наблюдает за событиями прокрутки на столе (FYI, UITableView является подклассом UIScrollView, так что все те же уведомления/обратные вызовы должен работать), но пример кода, к которому я привязан, имеет хороший пример того, как это работает.
У меня нет никаких проблем с реализацией этого материала для любого типа 'UITableView', но мне нужно иметь его для' UIWebView'. – MrMage
Я думаю, что лучшим решением является добавление заголовка в виде подсмотра вашего scrollView вашего UIWebView, настройки UIEdgeInsets, а в функции делегата scrollViewDidScroll при необходимости настраивает scrollIndicatorInsets.
Каждое другое решение, которое я нашел, не учитывало индикаторы прокрутки.
Поскольку для получения правильного поведения у него есть немного сложности, я решил написать класс для обработки всего этого: MMWebViewWithSmartHeader. Это все еще немного грубо по краям, но должно помочь.
большое спасибо! – HelloWorld
+1, хотя я не смог получить работу с набором 'UIImageView' как headerView. Мне пришлось обернуть 'UIImageView' внутри' UIView'. – FreeAsInBeer
Неплохо, но некрасиво, когда веб-просмотр увеличен или развернут на оси х. Заголовок должен блокироваться по оси x и не должен зависеть от масштабирования прокрутки. – Martin
Попробуйте это:
UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0, -100, WIN_WIDTH, 100)];
redView.backgroundColor = [UIColor redColor];
self.view.scrollView.contentInset = UIEdgeInsetsMake(100, 0, 0, 0);
[self.view.scrollView addSubview:redView];
NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:@"http://www.baidu.com"]];
[self.view loadRequest:request];
Мне нравится AutoLayout специально, потому что я могу сделать высоту заголовка динамичными.
Это мой код с использованием AutoLayout в контроллере со ссылкой «headerView» в виде заголовка и «webView» в webView.
// Function called in ViewDidLoad:
func addHeaderToWebView(){
// We load the headerView from a Nib
headerView = NSBundle.mainBundle().loadNibNamed(WebViewHeader.nibName, owner: self, options: nil).first as! WebViewHeader
headerView.translatesAutoresizingMaskIntoConstraints = false
webView.scrollView.addSubview(headerView)
// the constraints
let topConstraint = NSLayoutConstraint(item: headerView, attribute: .Bottom, relatedBy: .Equal, toItem: webView.scrollView, attribute: .Top, multiplier: 1, constant: 0)
let leftConstraint = NSLayoutConstraint(item: headerView, attribute: .Leading, relatedBy: .Equal, toItem: webView, attribute: .Leading, multiplier: 1, constant: 0)
let rightConstraint = NSLayoutConstraint(item: headerView, attribute: .Trailing, relatedBy: .Equal, toItem: webView, attribute: .Trailing, multiplier: 1, constant: 0)
// we add the constraints
webView.scrollView.addConstraints([topConstraint])
webView.addConstraints([leftConstraint, rightConstraint])
}
// Function called in viewWillLayoutSubviews: to update the scrollview of the webView content inset
func updateWebViewScrollViewContentInset(){
webView.scrollView.contentInset = UIEdgeInsetsMake(headerView.frame.height, 0, 0, 0)
}
- 1. Предпочтение, похожее на Finder, Safari и Mail
- 2. UIWebView Запуск в Safari
- 3. Толстое окно заголовка заголовка в какао, похожее на iTunes
- 4. видеоконтент на iPhone Safari/UIWebView
- 5. Добавление заголовка в WKWebView ScrollView
- 6. UIWebView: изменить вид заголовка
- 7. Внешняя ссылка Safari или UIWebview?
- 8. Форма представления содержимого статьи на Bootstrap
- 9. OAuth на iPhone: используя Safari или UIWebView?
- 10. Добавление UIWebView в UITableViewCell
- 11. открыть ссылку из UIWebView в Safari (iPhone)
- 12. Добавление представления заголовка в каждое представление в приложении
- 13. Добавление изображения в UIWebView
- 14. Safari: Форма представления
- 15. Добавление пользовательского поля заголовка HTTP во все запросы UIWebView
- 16. Как идентифицировать UIWebView как Safari
- 17. UIWebView open links in Safari
- 18. Добавление кнопок «Читать» на странице статьи
- 19. UIWebView открыть ссылку в Safari не работает?
- 20. Как сделать что-то похожее на поиск заголовка stackoverflow
- 21. UIwebview для нового контроллера представления
- 22. Открыть ссылку в Safari от UIWebView
- 23. Открыть специальную ссылку в Safari от UIWebView
- 24. Приложение iOS UIWebView открывает ссылку в Safari
- 25. Добавление кэша UIWebView в Xcode
- 26. Добавление заголовка в ListView Android
- 27. Добавление шрифта-awesome в UIWebView
- 28. Добавление веб-представления в ячейку прототипа
- 29. Несколько тегов HTML5 в Mobile Safari и UIWebView
- 30. Открытые ссылки в Safari вместо UIWebVIew?
Вы пробовали расспросить Софи? – hatfinch
Вы пытались добавить subview в UIWebView? – benzado