So deaktivieren Sie autolayout für einzelne UI-Elemente (UIlabel)

Muss ich ändern Sie die position einer Beschriftung innerhalb eines Viewcontroller verwendet autolayout. Bevor dazu habe ich

[arriveTimeLabel setTranslatesAutoresizingMaskIntoConstraints:YES];
[departTimeLabel setTranslatesAutoresizingMaskIntoConstraints:YES];

aber, dass die Erträge einiger Laufzeit-Warnungen

 Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2013-08-15 23:25:58.791 Vicinitime[78327:c07] 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) 
(
    "<NSLayoutConstraint:0x9173a20 UIScrollView:0x9580190.bottom == UIView:0x9173890.bottom>",
    "<NSLayoutConstraint:0x9171fe0 V:|-(138)-[UILabel:0x958cf70]   (Names: '|':UIScrollView:0x9580190 )>",
    "<NSLayoutConstraint:0x91739a0 V:|-(0)-[UIScrollView:0x9580190]   (Names: '|':UIView:0x9173890 )>",
    "<NSAutoresizingMaskLayoutConstraint:0xab6ec90 h=--& v=&-& UILabel:0x958cf70.midY == -6.3989*UIScrollView:0x9580190.height>",
    "<NSAutoresizingMaskLayoutConstraint:0xab6eef0 h=--& v=&-& V:[UILabel:0x958cf70(25)]>",
    "<NSAutoresizingMaskLayoutConstraint:0xab6dbd0 h=--& v=--& V:[UIView:0x9173890(455)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x9171fe0 V:|-(138)-[UILabel:0x958cf70]   (Names: '|':UIScrollView:0x9580190 )>

So, ich schaute mich um und sah, dass um dieses problem zu beheben habe ich
[arriveTimeLabel setTranslatesAutoresizingMaskIntoconstraints:NO];
[departTimeLabel setTranslatesAutoresizingMaskIntoconstraints:NO];

um keine. Das problem ist, dass jetzt die Etiketten sorglosen ändern der position programmgesteuert.

Wenn Sie brauchen, um code, um die Etiketten programmatisch:

    if(travelTimeInt <= activityTimeInt){

        [timeBreakdownButtonImage setBackgroundImage:[UIImage imageNamed:@"timeBreakdownBackground7.png"] forState:UIControlStateNormal];
        NSLog(@"got to setting label place");

        [self.arriveTimeLabel  setFrame:CGRectMake(67, 170, 41, 25)];

        [self.departTimeLabel  setFrame:CGRectMake(211, 170, 41, 25)];



    }
    if(travelTimeInt * 7 >= activityTimeInt){

            [timeBreakdownButtonImage setBackgroundImage:[UIImage imageNamed:@"timeBreakdownBackground6.png"] forState:UIControlStateNormal];

          NSLog(@"got to setting label place");

            self.arriveTimeLabel.frame = CGRectMake(71, 170, 41, 25);

       self.departTimeLabel.frame = CGRectMake(207, 170, 41, 25);

    }

Also gibt es eine Möglichkeit, ändern Sie die position des uilabel mit autolayout auf? vielleicht deaktivieren Sie autolayout?

  • Deaktivieren autolayout-option einzeln für jede Komponente ist nicht möglich wie jetzt.
  • Was über die Deaktivierung für die gesamte viewcontroller?
  • Ja natürlich können Sie es deaktivieren, für die ganze ViewController. Wählen Sie die Feder im Zusammenhang mit Ihrem ViewController -> Gehen Sie zu Datei-Inspektor -> Deaktivieren Sie "Use Autolayout" im Interface Builder Dokument Abschnitt.
  • Ich bin mit storyboard, also wenn ich es deaktivieren, dann deaktiviert es für die gesamte storyboard
  • Sie müssen erstellen Sie eine separate storyboard mit Autolayout deaktiviert, und verschieben Sie alle Ihre ohne Autolayout ViewControllers und dann dort einfach den link Ihres storyboards.
InformationsquelleAutor Spenciefy | 2013-08-16
Schreibe einen Kommentar