Solution found per here: https://forums.developer.apple.com/thread/18294

Calling alertcontroller.view.setNeedsLayout()

Immediately before presenting it fixes it on the platform mentioned in my
previous email (below)





> Hi list,
>
> I am getting strange feedback in the debugger when presenting a
> UIAlertController on iPhone 6 Plus (iOS9.1 device and iOS 9.2 simulator)
> and iPad Pro (iOS 9.2 simulator):
>
> "the behavior of the UICollectionViewFlowLayout is not defined because:
>
> the item height must be less than the height of the UICollectionView minus
> the section insets top and bottom values, minus the content insets top and
> bottom values.
>
> The relevant UICollectionViewFlowLayout instance is
> <_UIAlertControllerCollectionViewFlowLayout: 0x7fb8d5990790>, and it is
> attached to <UICollectionView: 0x7fb8d3a96800; frame = (0 123.667; 270
> 44); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x7fb8d5991420>;
> layer = <CALayer: 0x7fb8d5990d30>; contentOffset: {0, 0}; contentSize: {0,
> 0}> collection view layout: <_UIAlertControllerCollectionViewFlowLayout:
> 0x7fb8d5990790>.
>
> Make a symbolic breakpoint at
> UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the
> debugger."
>
>
>
>
>
> After setting the mentioned symbolic breakpoint and re-running the app,
> and subsequently typing 'bt' in the debugger, I am getting this stack
> trace:
>
>
> * thread #1: tid = 0xd3616a, 0x000000010f377ca8
> UIKit`UICollectionViewFlowLayoutBreakForInvalidSizes, queue =
> 'com.apple.main-thread', stop reason = breakpoint 1.1
>   * frame #0: 0x000000010f377ca8
> UIKit`UICollectionViewFlowLayoutBreakForInvalidSizes
>     frame #1: 0x000000010f37af15 UIKit`-[_UIFlowLayoutSection
> logInvalidSizesForHorizontalDirection:warnAboutDelegateValues:] + 219
>     frame #2: 0x000000010f3791d0 UIKit`-[_UIFlowLayoutSection
> computeLayout] + 951
>     frame #3: 0x000000010f3273d0 UIKit`__56-[UICollectionViewFlowLayout
> _updateItemsLayoutForRect:]_block_invoke + 107
>     frame #4: 0x0000000110b06462 CoreFoundation`__53-[__NSArrayM
> enumerateObjectsWithOptions:usingBlock:]_block_invoke + 114
>     frame #5: 0x0000000110b05b52 CoreFoundation`-[__NSArrayM
> enumerateObjectsWithOptions:usingBlock:] + 194
>     frame #6: 0x000000010f327293 UIKit`-[UICollectionViewFlowLayout
> _updateItemsLayoutForRect:] + 575
>     frame #7: 0x000000010f327726 UIKit`-[UICollectionViewFlowLayout
> _fetchItemsInfoForRect:] + 175
>     frame #8: 0x000000010f320efd UIKit`-[UICollectionViewFlowLayout
> prepareLayout] + 273
>     frame #9: 0x000000010f3416e5 UIKit`-[UICollectionViewData
> _prepareToLoadData] + 67
>     frame #10: 0x000000010f341e6e UIKit`-[UICollectionViewData
> validateLayoutInRect:] + 53
>     frame #11: 0x000000010f2f1208 UIKit`-[UICollectionView layoutSubviews]
> + 196
>     frame #12: 0x000000010eb4c4a3 UIKit`-[UIView(CALayerDelegate)
> layoutSublayersOfLayer:] + 703
>     frame #13: 0x000000011107759a QuartzCore`-[CALayer layoutSublayers] +
> 146
>     frame #14: 0x000000011106be70
> QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 366
>     frame #15: 0x000000010eb3bd0d UIKit`-[UIView(Hierarchy)
> layoutBelowIfNeeded] + 1129
>     frame #16: 0x000000010ed9b70f
> UIKit`-[_UIAlertControllerPresentationController
> _prepareConstraintsIfNecessary] + 727
>     frame #17: 0x000000010ed9b2b6
> UIKit`-[_UIAlertControllerPresentationController
> presentationTransitionWillBegin] + 351
>     frame #18: 0x000000010ec018dc UIKit`__71-[UIPresentationController
> _initViewHierarchyForPresentationSuperview:]_block_invoke + 2035
>     frame #19: 0x000000010ebff50e UIKit`__56-[UIPresentationController
> runTransitionForCurrentState]_block_invoke + 309
>     frame #20: 0x000000010eaa14a2 UIKit`_runAfterCACommitDeferredBlocks +
> 317
>     frame #21: 0x000000010eab4c01
> UIKit`_cleanUpAfterCAFlushAndRunDeferredBlocks + 95
>     frame #22: 0x000000010eac0af3 UIKit`_afterCACommitHandler + 90
>     frame #23: 0x0000000110b03367
> CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
> + 23
>     frame #24: 0x0000000110b032d7 CoreFoundation`__CFRunLoopDoObservers +
> 391
>     frame #25: 0x0000000110af8f2b CoreFoundation`__CFRunLoopRun + 1147
>     frame #26: 0x0000000110af8828 CoreFoundation`CFRunLoopRunSpecific +
> 488
>     frame #27: 0x0000000112c0ead2 GraphicsServices`GSEventRunModal + 161
>     frame #28: 0x000000010ea95610 UIKit`UIApplicationMain + 171
>     frame #29: 0x000000010e73712f WetboekVanStrafrechtCA`main(argc=1,
> argv=0x00007fff514ca528) + 111 at main.m:16
>     frame #30: 0x000000011657a92d libdyld.dylib`start + 1
>     frame #31: 0x000000011657a92d libdyld.dylib`start + 1
>
>
>
> HERE IS THE CODE INVOLVED:
>
>     func showSearchDialog() {
>
>         let alertcontroller = UIAlertController(title: "Search", message:
> "Search this document", preferredStyle: .Alert)
>
>         
> alertcontroller.addTextFieldWithConfigurationHandler({(input:UITextField)in
>             input.placeholder="Type your searchword here";
>             input.clearButtonMode=UITextFieldViewMode.WhileEditing;
>         });
>
>         alertcontroller.addAction(UIAlertAction(title: "Cancel", style:
> UIAlertActionStyle.Cancel, handler: nil));
>         alertcontroller.addAction(UIAlertAction(title: "Search", style:
> UIAlertActionStyle.Default, handler: {(action:UIAlertAction) in
>             if let fields = alertcontroller.textFields {
>                 let textfield = fields[0]
>                 if let needle = textfield.text {
>                     self.performSearch(needle)
>                 }
>             }
>         }));
>
>         presentViewController(alertcontroller, animated: true, completion:
> nil)
>     }
>
>
>
>
> THE ALERT GETS SHOWN, BUT IS HALF THE TIME SLOW TO APPEAR ON SCREEN...
>
> I DON'T HAVE THIS ISSUE WHEN RUNNING THE APP ON THE iPHONE 6 OR iPAD AIR 2
> SIMULATORS.
>
> HOWEVER, ON THE iPAD PRO SIMULATOR I AM SEEING THIS IN THE DEBUGGER:
>
> <Error>: CGContextConcatCTM: invalid context 0x0. Backtrace:
>         <-[UIKBRenderer renderKeyContents:withTraits:]+102>
>          <-[UIKBKeyplaneView drawContentsOfRenderers:]+1198>
>           <-[UIKeyboardCache 
> displayImagesForView:fromLayout:imageFlags:]+1518>
>            <-[UIKBKeyplaneView displayLayer:]+448>
>             <_ZN2CA5Layer7displayEv+140>
>              <_ZN2CA5Layer17display_if_neededEPNS_11TransactionE+293>
>               
> <_ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE+35>
>                <_ZN2CA7Context18commit_transactionEPNS_11TransactionE+277>
>                 <_ZN2CA11Transaction6commitEv+486>
>                  <_afterCACommitHandler+174>
>                   
> <__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__+23>
>                    <__CFRunLoopDoObservers+391>
>                     <__CFRunLoopRun+1147>
>                      <CFRunLoopRunSpecific+488>
>                       <GSEventRunModal+161>
>                        <UIApplicationMain+171>
>                         <main+111>
>                          <start+1>
> <Error>: CGBitmapContextCreateImage: invalid context 0x0. Backtrace:
>         <__52-[UIKBRenderer
> renderBackgroundTraits:allowCaching:]_block_invoke_2+38>
>          <-[UIKBRenderer _completeCacheImageWithTraitsIfNecessary:]+50>
>           <-[UIKBRenderer renderKeyContents:withTraits:]+317>
>            <-[UIKBKeyplaneView drawContentsOfRenderers:]+1198>
>             <-[UIKeyboardCache
> displayImagesForView:fromLayout:imageFlags:]+1518>
>              <-[UIKBKeyplaneView displayLayer:]+448>
>               <_ZN2CA5Layer7displayEv+140>
>                <_ZN2CA5Layer17display_if_neededEPNS_11TransactionE+293>
>                 
> <_ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE+35>
>                  <_ZN2CA7Context18commit_transactionEPNS_11TransactionE+277>
>                   <_ZN2CA11Transaction6commitEv+486>
>                    <_afterCACommitHandler+174>
>                     
> <__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__+23>
>                      <__CFRunLoopDoObservers+391>
>                       <__CFRunLoopRun+1147>
>                        <CFRunLoopRunSpecific+488>
>                         <GSEventRunModal+161>
>                          <UIApplicationMain+171>
>                           <main+111>
>                            <start+1>
> <Error>: CGContextConcatCTM: invalid context 0x0. Backtrace:
>         <-[UIKBRenderer renderKeyContents:withTraits:]+102>
>          <-[UIKBKeyplaneView drawContentsOfRenderers:]+1198>
>           <-[UIKeyboardCache 
> displayImagesForView:fromLayout:imageFlags:]+1518>
>            <-[UIKBKeyplaneView displayLayer:]+448>
>             <_ZN2CA5Layer7displayEv+140>
>              <_ZN2CA5Layer17display_if_neededEPNS_11TransactionE+293>
>               
> <_ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE+35>
>                <_ZN2CA7Context18commit_transactionEPNS_11TransactionE+277>
>                 <_ZN2CA11Transaction6commitEv+486>
>                  <_afterCACommitHandler+174>
>                   
> <__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__+23>
>                    <__CFRunLoopDoObservers+391>
>                     <__CFRunLoopRun+1147>
>                      <CFRunLoopRunSpecific+488>
>                       <GSEventRunModal+161>
>                        <UIApplicationMain+171>
>                         <main+111>
>                          <start+1>
>  <Error>: CGBitmapContextCreateImage: invalid context 0x0. Backtrace:
>         <__52-[UIKBRenderer
> renderBackgroundTraits:allowCaching:]_block_invoke_2+38>
>          <-[UIKBRenderer _completeCacheImageWithTraitsIfNecessary:]+50>
>           <-[UIKBRenderer renderBackgroundTraits:allowCaching:]+2870>
>            <-[UIKBRenderer renderKeyContents:withTraits:]+102>
>             <-[UIKBKeyplaneView drawContentsOfRenderers:]+1198>
>              <-[UIKeyboardCache
> displayImagesForView:fromLayout:imageFlags:]+1518>
>               <-[UIKBKeyplaneView displayLayer:]+448>
>                <_ZN2CA5Layer7displayEv+140>
>                 <_ZN2CA5Layer17display_if_neededEPNS_11TransactionE+293>
>                  
> <_ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE+35>
>                   <_ZN2CA7Context18commit_transactionEPNS_11TransactionE+277>
>                    <_ZN2CA11Transaction6commitEv+486>
>                     <_afterCACommitHandler+174>
>                      
> <__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__+23>
>                       <__CFRunLoopDoObservers+391>
>                        <__CFRunLoopRun+1147>
>                         <CFRunLoopRunSpecific+488>
>                          <GSEventRunModal+161>
>                           <UIApplicationMain+171>
>                            <main+111>
>                             <start+1>
>
>
>
> HAS ANYBODY RUN INTO THIS? AND/OR CAN ANYBODY TELL ME WHETHER THIS IS BAD
> AND HOW I CAN GET THE ALERT TO APPEAR CONSISTENTLY FAST ON SCREEN??
>
>
> MANY THANKS,
>
>
>
>
> DIEDERIK
>
>
>
>
>
> _______________________________________________
>
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/diederik%40tenhorses.com
>
> This email sent to diede...@tenhorses.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to