Question
In the docs for MFMessageComposeViewController apple says:
Important The message composition interface itself is not customizable and must not be modified by your application.
But navigationbar and barbuttonitems in the MFMessageComposeViewController and the MFMailComposeViewController are inheriting all the styling I've done through UIAppearance.
I tried to revert to default appearance by using UIAppearance containment and setting the navigationbar/barbuttonitem background images to nil, but I couldn't figure out how to restore the default titleTextAttributes for the navigationbar and barbuttonitem.
I tried going the other route and using containment to restrict the styling to my navigation controller, but it seems like MFMessageComposeViewController and MFMailComposeViewController are contained within my navigaton controller anyway, so this isn't helping.
So my questions are:
1) will changing the navbar appearance on MFMessageComposeView and MFMailComposeView be an issue at app store approval? (if it's not an issue I can keep the custom styles.)
2) is there a way to present the ComposeViewController so that it won't be contained within my navigation controller?
3) or simply, how can i restore the default title text attributes for the barButtonItems and navigationBar?
It seems to be a rather old question, but:
1). No, changing appearance of navigation bar will not affect AppStore approval. Mentioned Apple note is related to fields of MFMessageComposeViewController (e.g. To: Cc: ...), not the navigation bar. (We had an approved app with such customized navbar)
2, 3) No need for that =)
Related
Apple says in its Documentation:
It is permissible to customize the appearance of the navigation bar using the methods and properties of the UINavigationBar class but you must never change its frame, bounds, or alpha values or modify its view hierarchy directly.
They never strictly mention that changing constraints is not allowed but I'm assuming it falls under the same criteria as of changing the frame.
I would need this for a messages app in order to achieve the translucency effect under the iMessage standard top bar. What I currently have is a UINavigationController embedded in a MSMessagesAppViewController with the topAnchor set underneath the topLayoutGuide. This prevents me from achieving the effect but places the navigation bar below the top bar accordingly. If I set the constraints to just attach to the topAnchor, the Navigation bar is hidden in the extended view. Changing the constraints of the UINavigationBar here could solve the problem.
Am I allowed to change the constraints of the UINavigationBar and if not, any other solutions for this issue? For any further information just tell me.
I don't know how well anyone on Stack Overflow can answer this question, since it ultimately comes down to Apple's opinion/review. I've shipped apps with oversized/modified Navigation Bar and Navigation Controller frames without rejection from Apple, so I would tentatively say that this is safe to modify in your app.
I'm not sure what you're describing (as I don't know what MessagesController is), but it sounds like you have a Navigation Controller embedded inside another Navigation controller, and fixing the issue by hiding one of the bars sounds like a code smell...
I am customizing MFMailComposeViewController. For changing it's UI I detected the UIBarButtonItem and changing it's appearance using:
[[UIBarButtonItem appearance]setTitle:#""];
I am getting crashed in my other classes where I used UIBarButtonItem with text. I fixed those by using customView for the bar button. I am also using share kit in my app and now I am having crash in twitter login screen when keyboard appears with toolbar (In next/Previous and Done buttons).
Is there any way to avoid crashes in my app's other bar button items after I set appearance for a specific class?
Is there any way to assign customView to ShareKit's twitter's login screen's buttons?
Is there any way to remove those bar buttons if no for both above?
Thanks.
UIBarButtonItem appearance proxy does not have a method for setTitle.
In the documentation you will find wich method are available for Customizing Appearance
You can't customise the appearance of the MFMailComposeViewController.
From Apple's docs on the class:
"The mail composition interface itself is not customizable and must not be modified by your application."
I seem to remember sometime back reading that changing the appearance of the mail composer view controller was not allowed. However, I also just tried for the first time to implement changes to my navigation bars system wide using the
[[UINavigationBar appearance] setBackgroundImage
method
This changes the navigation bar in the mail composer view controller. So, is this now allowed to make changes? Reason I am doing the appearance call is I have a lot of navigation bars and would like to get them all set at once.
The appearance methods are documented and their effects are intended to be app-wide, so I see no reason why it would be a problem to use them.
I am developing app that has multiple skins and I have a dilemma on how to implement this.
One of the solutions would be to have separate nib files for every skin, and load it depending on which skin is currently selected. Problem with this is that I can't edit navigation bar of navigation controller (which my app uses), and I have to change it's background image and back button image etc.. I came up with an idea to hide this navigation bar on every screen and replace it with custom UIView in Interface Builder which will act as navigation bar and custom back button with IBAction for popping current View Controller, so that user won't see any difference.
Is this approach acceptable and if I make it this way, will I have problems with rejection in App Store?
If you choose to hide & replace the UINavigationBar with your own UIView it's no problem as far as Apple goes.
However, I can tell you that you will have to spend some time trying to replicate some visual effects that come naturally with UINavigationBar.
For example, when you push/pop a new controller, you will see that the navigation bar title will slide & fade beautifully. The same applies for left and right bar items.
Personally I would not completely hide the UINavigationBar, but customize it. In the end it all depends on what you want, but by default the UINavigationBar is pretty customizable.
You can add your own buttons or even entire UIViews as left and right bar items. Also, you can add your own UIView as the title (with your own label, custom font or whatever) or change the background.
EDIT:
To easily customize the looks in your entire application, you can subclass UINavigationController and create your own CustomUINavigationController. Then, in viewDidLoad method you can change whatever you want to the navigation bar and this will be accessible in the entire application.
No way, what you are doing is perfect. This will work & no way it will get rejected from app store (just based on this approach). I too have explored several ways to provide skins & what you wrote seemed to be the least hassle-some. Plus its way more easier to create UI elements in Interface Builder hence the separate nib files for different skins.
I am saying this so confidently 'coz I have done the same thing & app store approved.
Best of luck.
How can i set a subject to a MFMailComposeViewController but do not show the title in the navigation bar?
The thing is that i have a background image and the text overlays on the image and it doesn't look good.. Any ideas?
You should not be customizing the interface of the mail composer vc:
From the docs:
Important: The mail composition interface itself is not customizable and must not be modified by your application. In addition, after presenting the interface, your application is not allowed to make further changes to the email content. The user may still edit the content using the interface, but programmatic changes are ignored. Thus, you must set the values of content fields before presenting the interface.
You can refer the following link:
http://davidjhinson.wordpress.com/2010/11/24/changing-the-navigation-bar-with-mfmailcomposeviewcontroller/