Shrinking webpages that are shown in your UIWebviews - iphone

In my app I load some webpages in a 480*320(landscape) UIWebView. But the text is too large, well really the whole content of the page is too big.
Is there some trick that you can do to scale down the whole page in the web view so that it does not seem completely out of proportion to the rest of the app?
I'm guessing there is not and that the only way is to get the HTML of the whole page and look for Font tags and change them all to something smaller and then loading it into a UIWebView.
Thanks for any suggestions or ideas you can offer,
-Code

The UIWebView property scalesPagesToFit should work:
myYebView.scalesPagesToFit = YES;
From the UIWebView documentation:
You can also use the scalesPageToFit property to programmatically set the scale of web content the first time it is displayed in a web view. Thereafter, the user can change the scale using gestures.

Related

Displaying Lots Of RichText : Choosing the best option

What is the best way to display lots of RichText (HTML formatted)
At the moment I'm working on an app for a forum. As you'd expect the posts on the site have lots of HTML formatting, lists, images bold text, colored text, etc...
Now there are several options I can think of (non of them ideal, please if you think of any other options post them in the comments):
Custom Cells using NSAttributedString+HTML + DTAttributedTextView for each post?
Problems: I used the NSAttributedString+HTML categories in the app elsewhere and it was less then ideal, creating an NSAttributedString seems to be quite expensive (slow) even in small amounts.
For 10+ posts each of which may be the length of an entire article would be awful + although DTAttributedTextView supports the IMG html tag (an most tags) it doesn't support remote loading of images unless you specify their width and height in the img tag. And for a forum where an IMG tag could be a smiley (10*10) or a screenshot (640*960) there's no way to predict that.
(Since writing this NSAttributedString+HTML, which is now renamed DTCoreText, has added full support for <img> tags and improved greatly!)
Custom Cells with a UIWebView in them for each post?
This one I considered for quite a while, however when reading this blog post I realised a problem that would cause, Smooth scrolling. The idea of having a native application for a site is that it is better then using a simple UIWebView to view the sites mobile theme. If the app lags and is jerky while scrolling that is worse not better (also as I need to display images hiding the webview's like he suggests wouldn't work). Also UIWebView's need to be created on the main thread or they break.
Back to the UIWebView?
Annoyingly besides doing a pathetic cheat, (like in the iFans app) where you only display text and then if they click it a UIWebView loads with all the nice images etc..., the only option left seems to be to do what I think the TapaTalk app does and have the entire thread view as a UIWebView. This isn't too bad as it will probably have quite good performance and will allow me to possibly add user controlled themes etc.. but I find the idea of using a UIWebView in a websites native app repulsive.
Does anyone have any experience creating web powered app, like maybe a facebook client, forum app, or new site app which had to display content from the site (I don't really count a twitter client as it only has to deal with text & links in small amounts per post). Or any ideas on the best way to display RichText content in an iOS app?
Any idea's would have to deal with the lot:
Multi Coloured Text.
Right, Left & Center aligned text.
Images (of variable size).
Bold text.
Text of different sizes & fonts.
Underlines text.
YouTube Videos.
HTML tables.
Just in case the actual question wasn't very clear in all of that I'll sum it up:
"What is the best way to display lots of RichText (HTML formatted) content for a forum client app"
So if I am reading this right, you want the forum posts of a given topic to be cells of a UITableView and the cells need rich formatting?
Assuming this is correct, I imagine each post will take up a lot of the screen (large cell height). In this case, having a UIWebView as a subview might not be as bad performance-wise as you might think. UITableView reuses cells so really only the visible cells need be loaded into memory.
I'm also assuming you are able to access the forum via an API, right? In which case, you should be able to pre-load data immediately prior to loading the view and the UIWebViews will only be used for formatting. You can even load a CSS file from your app bundle when you loadHTMLString into your UIWebView so you're not loading that from a server every time.
All that being said, if you did have a lot of concurrently visible cells it might be a different story and I'd maybe consider only showing plain text in the UITableView index and displaying the rich formatting only when the user taps the cell to view the single post. This might also be better from a design standpoint as having a ton of differently formatted cells on screen could potentially end up looking a bit sloppy.
Also, this may be obvious (especially since you seem to be both performance and design conscious) but please don't use UIWebView for UI controls. Any time I see a UIWebView tab bar or fake navigation bar I cringe (ack, Netflix). For formatting though, a lot times it's the only way to fly if you're loading a lot of dynamic content from a server.
NSAttributedString+HTML already supports lazy loading of images. See the Demo that shows how to do that. It's reasonably fast but you want to hold of parsing the HTML for content that is not on screen.
It mostly depends on what UI you want to achieve. NSAS+HTML is meant for situations where you control the quality of the HTML (i.e. because you generate it yourself). There it affords you with an unprecedented level of control over the view hierarchy because you can embed your own custom views to show images.
In other cases where you cannot be sure about the quality of the HTML you have to use UIWebView and work around all of it's limitations, one being that it takes enormous amounts of RAM and it slow to show the contents. Also UIWebView is not thread-safe (because WebKit is not).

UIWebView or UIScrollView for HTML like View in iPhone Application

Sorry for this simple question but I am looking for the design pattern for adding a simple HTML like page to an iPhone app.
My intuition tells me that making a View with a full screen WebView inside is obviously the easiest option, but I think a UIScrollView is better.
What's the best practice?
I basically want to have some text, float some images, add a few links etc.
Should I use WebView or ScrollView?
Thank you,
Kent
Well you're going to need a UIWebView if you want to display the contents of a local or remote web page. You would want to use a UIScrollView if you wanted to draw all of the content programmatically.
I think you want a UIWebView.

Is there a clever way to figure out what size a UIWebview needs to be to hold all text

I get a page full of info from the server VIA JSON. There is a lot of info and different parts to the info, images, text, graphs etc. So i display it inside a UIScrollView so the whole page can scroll. I get some HTMl which i want to display inside a UIWebView. I have the HTML before i create the UIWebView so i can change the height of the UIWebView to contain all the text without the UIWebView itself needing to scroll. But it can vary in length each time i get a new load of data back from the server so i cant hardcore the height it needs to be.
So my question is. Given you have an NSString holding the HTML. Is there a way to calculate how high the UIWebViews frame needs to be, to contain all the HTML without having to scroll.
Hope you understand my question it is kinda long :)
Thanks,
-Code
If it's ok to resize the webview (and the parent scroll view's contentSize property) after the HTML finishes loading, you can use JavaScript to query the rendered height of the HTML and use that. See iPad - find the true height of a UIWebView
Well that would depand on the size of the text in the UIWebView. One way I can think of is to try finding out how many characters (letters) you need to fill one line in your UIWebView. Then use that number to devide your total number of characters in the NSString containing the HTML and base on that number lets call it lanes you could increase the hight of your UIWebView

how to load the pdf through programming with animation in iphone

how load a pdf into iphone and my pdf is of 200 pages then it should allow to turn the pages as we do with while reading book manually means use animation to turn a page one by one ..
Thanking you ..
Loading a large PDF and having page flipping animation isn't very simple. You can use a UIWebView like #Jim says to load the entire thing by just pointing the UIWebView's URL to the PDF but you won't get page animation. However to get full control requires that you render the PDF page by page manually to a view, and create the view's turning animation your self. Its nontrivial, and given your question you don't sound like you know enough to realistically achieve this right off.
Use UIWebView Control to load pdf files.

How to fit PDF height in UIWebView in iPhone/iPad

I have a project that uses a UIWebView to display a single page PDF file. I would like this content to fit by height (vertically). The default is only to fit width (horizontally). Is there any way to overcome this?
I ran against the same problem and couldn't find a way to do it with UIWebView. If you only want to display a single PDF-page, you can pretty much take the code from Apple's ZoomingPDFViewer Example.
I took the two classes PDFScrollView and TiledPDFView and with a little adjustment for my project, I was easily able to use it to display a single PDF page.