Search code examples
iosautolayoutuiprogressview

UIProgressView have different position at runtime


I place a UIProgressView on an XIB file. At first it goes well. After when I set its height via auto layout to be 20, problem occurred. The Progress View always got its position at the most top-left of the screen. even I use

[self.progress setFrame:CGRectMake(93, 100, self.scrollView.frame.size.width, self.scrollView.frame.size.height)];

still don't work for me at all.

Thank you very much for any help.


Solution

  • use size constraints as outlets. Then you can easy change values of those constraints. It's not really recommended to modify frame when using auto-layout.

    declare a property:

    @property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
    @property (strong, nonatomic) IBOutlet NSLayoutConstraint *widthConstraint;
    

    and in the implementation:

     self.heightConstraint = self.scrollView.frame.size.height;
     self.widthConstraint= self.scrollView.frame.size.width;
    

    Alternatively you can try to set frame in viewDidLayoutSubviews but it's not recommended when using auto-layout.