How to smoothly translate view in iMessage extension in iOS 10? - ios

I have issue when I try to push view controller in willTransitionToPresentationStyle:. The view was blinking for a split second before it fully expanded. It might be a small glitch or bug since iOS 10 and Xcode 8 are still in beta. But when I manually requested to change presentation style to MSMessagesAppPresentationStyleExpanded by calling requestPresentationStyle: after I push view controller, it went to expand mode more smoothly. Does anyone have similar issue?

I have had similar problems with transitions in iMessage apps. I think this should improve considerably when iOS 10 and Xcode 8 come out of beta, but for now we have to deal with Xcode's bugs.
There's a few things I've done to make this look better. Inside my extension I have a method that checks the presentation style every time the view changes. This method manages two different UIs - one for MSMessagesAppPresentationStyleExpanded and one for MSMessagesAppPresentationStyleCompact. This method hides and shows specific views accordingly. In my compact UI I have a button that allows the user to expand the interface by clicking it (this is basically the same as clicking the up arrow at the bottom right of the screen).
I've noticed that if you let the user expand the messages app after the view has been loaded for a while the transitions are much smoother and less buggy. Not sure why this is the case, but you should give it a try. Also, I've found segues to be extremely buggy, so that's why I went with keeping everything on one view controller.

Related

Firebase Screen name issue with modal views in iOS 13 and above

In our app we are tracking screen views manually by adding relevant codes in viewWillAppear functions. With iOS 13, with the non fullscreen modals, the viewWillAppear of the parent screen won't get called when the modal is dismissed and hence wrong screen names are reported there after, for events originating from the parent screen.
I have checked the Detecting sheet was dismissed on iOS 13 , but the solution to implement  UIAdaptivePresentationControllerDelegate helps when you manually swipes down.
I then turned off manual tracking and turned on Automatic tracking and surprisingly the screen classes are determined right. Question is how Firebase is figuring that out?
Of-course I can't use auto tracking as we need custom screen names.
I believe this could be a generic issue for whoever using manual screen name tracking and have non full screen modals. Just wanted to check what's the best way to solve this.
Couple of ideas I had was
Make all modals full screen. Not nice for our app
Implement extra delegates in those modals to let the parent know its dismissed. Not sure its a nice way
Setting screen names on each event? Could that be even possible?
If there are any other nicer/ cleaner option let me know.

iOS 11: `UIBarButtonItem`s having placement and usage issues

We have an app that has been around since before the days of storyboards. Prior to iOS 11 everything was fine after we updated it to be 64 bit. We have found two issues when running under iOS 11:
On iPhones the single UIBarButtonItem in the navigation bar's RightBarButtonItems isn't being placed all the way to the right as usual (the left side buttons is in the proper position).
On iPads we have what looks much like a segmented control (but made of individual buttons). It works fine when it is not in any kind of bar, but when it is in a bar it doesn't get touches.
In both cases I have used the UI navigator in Xcode to see that iOS 11 has added a couple extra views between bars and buttons. One of the added views is a bar content view (specific class depends on wether it is a toolbar or navigation bar; _UIToolbarContentView or _UINavigationBarContentView). The other added view is consistent among all kinds of bars, _UIButtonBarStackView.
In issue 1 above the added stack view is adding a very wide zero height view after the right bar button that is pushing the button way to the left (like it is trying to fit on an iPhone 4's screen far). Since the class has an underscore in front of it and isn't listed in the docs it must be a private class so even if I did dig into it and figure out how to keep the extra padding from getting added to the end it would get rejected by Apple for using private API.
I can't be sure what of the new views is intercepting the touches for the second issue but given that they are the only real differences I see between iOS 10 & 11 they seem the most likely culprits.
As I mentioned this was built before storyboards so the UI is built in xib files.
Has anyone run into issues with these new views and found a way to solve them? Or should I just rip out the whole UI and rebuild it?

ScrollView and viewcontrollers

Here is context for my question, this is an optional read:
I have to develop an app for a
school project. At the end of the year some people I don't know will
listen to me presenting my app, and review my presentation and my app
(note that they will probably not be app developers, they are usually
IT professors) (note also that I'm allowed to ask for help to anybody,
and I can use internet since I do this mostly on my "free time")
So since October I'm developing my app, that takes a lot of time
because this is my first app. And here comes the issue:
My app is a giant Scroll view with 5 NavigationsControllers, each containing a ViewController. These ViewControllers sometimes have buttons that leads to an other ViewController. The problem is when I use these buttons, and another view controller is displayed, when I swipe right or left the ScrollView scrolls and another ViewController from the scrollView is displayed. I don't want this to happen because most of the time the ViewController displayed after the tap on a button is not meant to stay, it's generally a form to send data to the server.
As I think this is difficult to understand, you can download the project on Github
Is there a way for me to disable scroll on chosen ViewControllers? or should I change everything to avoid using a ScrollView?
Bonus question:
Is it a really really bad idea to make an app this way, or did I just miss something?
Thanks for your help!

Apple Watch: Status bar not visible after presenting a modal screen from page based navigation

When i present a modal screen from a page in page based navigation, the whole screen shifts up and the status bar is no longer visible.
Here is a gif of the issue:
I am using xCode 6.2 version.
This was not happening in xCode 6.2 Beta 4..
I am not sure if this is a simulator issue or this will actually happen on a real device too.
Does anyone have the same issue? Is there a workaround?
I reported a bug to apple (20109240) and it was marked as a duplicate of (19862945), and that one is still open.
Thanks in advance
This is a known issue in the final release that exhibits itself in two cases:
When presenting a second modal controller (paging or single) over an existing paging modal controller
When presenting a menu using Force Touch over a paging modal controller
This has been discussed in the Apple Developer Forums, and the only workaround I've heard about is one that I use in my app. Unfortunately, there's no simple code to share that solves the problem, so I'll describe the approach (which I'd consider messy, but workable).
First, you need to keep track of interface controller presentations. I have a framework for this, but you may have to roll your own. When a child interface controller has its willActivate called two times in a row (in other words, without a call to a different child interface controller) you can assume that a modal was presented/dismissed on top of it.
Your presenting/parent controller can then inform all children that the modal menu bug has happened, and those child controllers can unhide a replacement status bar with its own Cancel/Close button. With some work, you can recreate a pixel-perfect version of the standard status bar with identical behavior.
The final twist is to detect when your Watch app is suspended, then resumes. In that case, willActivate is also called twice. If you don't handle that situation, you'll end up unhiding the replacement status bar and have two on the screen simultaneously. Not a great scenario.
Getting this right is very tricky, but it does work. I just wish I had a simple code sample that you could inject.
Update: I pushed some of my workaround code to GitHub: https://github.com/mikeswanson/JBInterfaceController

iOS5 delete tableView section animation

I have a tableView with a few sections. When I remove all rows from a section, I also remove the section with the UITableViewRowAnimationTop animation (so it slides up). When running the app on an iOS 4 device, the deleteSections: withRowAnimations: method correctly makes the section slide up and disappear behind whatever is above it. However on iOS 5, the section slides up but stays infront of whatever is above it, then disappears once it's finished sliding. What could be wrong?
FYI: I'm using iOS5 but have changed the iOS deployment target to iOS 4.0, so my app will run on all iOS version from 4 upward, and have changed the architecture to armv6 armv7
EDIT: For testing, I created an empty project with just a UITableViewController, which had a couple of sections with a couple of rows in each, nothing fancy. Got the same behaviour, so although I'm really hesitant to do this (because it's almost never the case), I'm going to go out on a limb and say this is a bug in iOS5?
Having a similar problem. Popping a view controller where the animation is supposed to slide the prior view in from the left (works fine on iOS 4). But on iOS 5 the bulk of the page appears immediately while only the bottom tab bar slides in from the left. Have single-stepped through the code on both versions and it appears to be taking the same path right up to the popViewControllerAnimated call.
Unfortunately this is a very complex app (unnecessarily complex, but that's another story) where most of the screens are dynamic, so it's hard to simplify down to a test case. No obvious solution so far.

Resources