• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Updated View Bounds After Orientation Change...
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Updated View Bounds After Orientation Change...


  • Subject: Re: Updated View Bounds After Orientation Change...
  • From: "Peters, Brandon" <email@hidden>
  • Date: Tue, 27 Oct 2015 02:49:47 +0000
  • Thread-topic: Updated View Bounds After Orientation Change...
  • X_v_e_cd: 1d1c802045995c68d6feb81fba34941a
  • X_v_r_cd: 1cadbe69ce12ac0dccd576383d4a0f11

David,

In IB, I have a vertical UIStackView with an image view and a text view (stacked in that order). I add the activity indicator programmatically:

override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        // add activity indicator and start animation
        if _useActivityIndicator == true {

            // set constraints
            _imageView.addSubview(_activityIndicator)

            _activityIndicator.centerXAnchor.constraintEqualToAnchor(_imageView.centerXAnchor).active = true
            _activityIndicator.centerYAnchor.constraintEqualToAnchor(_imageView.centerYAnchor).active = true

            _activityIndicator.startAnimating()
        }
    }

I get this error:

2015-10-26 22:44:42.971 Historic Sites Navigator[247:13410] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
    "<NSAutoresizingMaskLayoutConstraint:0x14dbda90 h=--& v=--& UIActivityIndicatorView:0x14eb3760.midX == + 10>",
    "<NSLayoutConstraint:0x14dce780 H:|-(0)-[UINavigationBar:0x14dd17d0]   (Names: '|':UIView:0x14d88e30 )>",
    "<NSLayoutConstraint:0x14d7a200 H:[UINavigationBar:0x14dd17d0]-(0)-|   (Names: '|':UIView:0x14d88e30 )>",
    "<NSLayoutConstraint:0x14d7f660 UIStackView:0x14dbcf50.trailing == UINavigationBar:0x14dd17d0.trailing>",
    "<NSLayoutConstraint:0x14d81a70 UIStackView:0x14dbcf50.leading == UINavigationBar:0x14dd17d0.leading>",
    "<NSLayoutConstraint:0x14dca540 UIActivityIndicatorView:0x14eb3760.centerX == UIImageView:0x14dd16c0.centerX>",
    "<NSLayoutConstraint:0x14ea41c0 'UISV-canvas-connection' UIStackView:0x14dbcf50.leading == UIImageView:0x14dd16c0.leading>",
    "<NSLayoutConstraint:0x14e75910 'UISV-canvas-connection' H:[UIImageView:0x14dd16c0]-(0)-|   (Names: '|':UIStackView:0x14dbcf50 )>",
    "<NSLayoutConstraint:0x14e746c0 'UIView-Encapsulated-Layout-Width' H:[UIView:0x14d88e30(320)]>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x14dca540 UIActivityIndicatorView:0x14eb3760.centerX == UIImageView:0x14dd16c0.centerX>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

I do not understand how the error is occurring.


On Oct 26, 2015, at 2:02 PM, David Duncan <email@hidden<mailto:email@hidden>> wrote:


On Oct 25, 2015, at 12:13 PM, Peters, Brandon <email@hidden<mailto:email@hidden>> wrote:

David,

I tried your suggestion, but the program terminates. I get this in the console:

view did load...
2015-10-25 15:10:57.893 Historic Sites Navigator[766:538109] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with items <UIActivityIndicatorView: 0x145933b0; frame = (0 0; 20 20); hidden = YES; layer = <CALayer: 0x14593220>> and <UIImageView: 0x145966c0; frame = (0 0; 320 208); autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x145967a0>> because they have no common ancestor.  Does the constraint reference items in different view hierarchies?  That's illegal.’

You need to ensure they have a hierarchy relationship before activating the constraints – you probably didn’t add one as a subview of the other yet.

*** First throw call stack:
(0x2635c68b 0x37716e17 0x2635c5d1 0x271fa7cd 0xce7d8 0xceeb4 0x2a43821b 0x2a43879f 0x2a755c47 0x2a86185d 0x2a7590b1 0x2a547cff 0x2a547b39 0x2a5476ad 0x2a54724f 0x2a459535 0x2a45942f 0x29cf45a9 0x123ed73 0x1243815 0x2631f9ad 0x2631dea7 0x26271249 0x26271035 0x2f354ad1 0x2a486899 0xc5a44 0x37e62873)
libc++abi.dylib: terminating with uncaught exception of type NSException

I will continue to work on it though. Thanks...

On Oct 25, 2015, at 1:11 PM, David Duncan <email@hidden<mailto:email@hidden>> wrote:


On Oct 24, 2015, at 8:45 PM, Peters, Brandon <email@hidden> wrote:

Devs,

I have a UIStackView, which holds an image view and a text view. The image view has an activity indicator view as a subview (I add this programmatically). When the view initially view loads, I center the activity indicator view within the image view and starting the animation for the AIV. But, in the process of waiting for the image to load, if I rotate the image view, the AIV needs to be re-centered. I added code to listen for the status bar orientation change notification, and have a method to invoke upon the notification (UIApplicationDidChangeStatusBarOrientationNotification). In that method, I attempt to get the bounds of the image view and use that to re-center the AIV within the image view. But, it seems that the value of the bounds of the image view is not changing when the device orientation changes. Is there a “reliable" way to get the updated bounds for a view after the device orientation has changed? Code ->

Why do all this at all? Just add 2 constraints that tie the center of the activity indicator to its superview and it will remain centered always.

[_activityIndicator.centerXAnchor constraintEqualToAnchor:_imageView.centerXAnchor].active = YES;
[_activityIndicator.centerYAnchor constraintEqualToAnchor:_imageView.centerYAnchor].active = YES;

(or equivalent if you need to support prior to iOS 9).


// start listening for orientation changes
          NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationDidChange:",
              name: UIApplicationDidChangeStatusBarOrientationNotification, object: nil)
…
func orientationDidChange(notification: NSNotification) {

      // get image view bounds
      let viewBounds = _imageView.bounds

      // recenter the activity indicator
      _activityIndicator.center = CGPointMake(CGRectGetMidX(viewBounds), CGRectGetMidY(viewBounds))

  }

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

--
David Duncan


--
David Duncan

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden


  • Follow-Ups:
    • Re: Updated View Bounds After Orientation Change...
      • From: Ken Thomases <email@hidden>
References: 
 >Updated View Bounds After Orientation Change... (From: "Peters, Brandon" <email@hidden>)
 >Re: Updated View Bounds After Orientation Change... (From: David Duncan <email@hidden>)

  • Prev by Date: Smooth adjustScroll of NSScrollView
  • Next by Date: Re: Updated View Bounds After Orientation Change...
  • Previous by thread: Re: Updated View Bounds After Orientation Change...
  • Next by thread: Re: Updated View Bounds After Orientation Change...
  • Index(es):
    • Date
    • Thread