คำถามติดแท็ก nslayoutconstraint

NSLayoutConstraint เป็นข้อ จำกัด กำหนดความสัมพันธ์ระหว่างอ็อบเจ็กต์อินเทอร์เฟซผู้ใช้สองตัวที่ต้องเป็นไปตามระบบโครงร่างตามข้อ จำกัด พร้อมใช้งานใน iOS 6.0 และใหม่กว่าใน UIKit และพร้อมใช้งานใน OS X v10.7 และใหม่กว่าใน AppKit

16
วิธีเพิ่มข้อ จำกัด แบบโปรแกรมโดยใช้ Swift
ฉันพยายามคิดเรื่องนี้มาตั้งแต่สัปดาห์ที่แล้วโดยไม่ต้องทำอะไรเพิ่มอีก ตกลงดังนั้นฉันจำเป็นต้องใช้ข้อ จำกัด บางอย่างโดยทางโปรแกรมในSwiftกับการUIViewใช้รหัสนี้: var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100)); new_view.backgroundColor = UIColor.redColor(); view.addSubview(new_view); var constX:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0); self.view.addConstraint(constX); var constY:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: …

2
setNeedsLayout vs. setNeedsUpdateConstraints และ layoutIfNeeded vs updateConstraintsIfNeeded
ฉันรู้ว่าห่วงโซ่การจัดวางอัตโนมัติประกอบด้วยกระบวนการที่แตกต่างกัน 3 ประการ อัปเดตข้อ จำกัด มุมมองเค้าโครง (นี่คือที่ที่เราได้รับการคำนวณเฟรม) แสดง อะไรไม่ได้โดยสิ้นเชิงชัดเจนกับผมคือความแตกต่างระหว่างภายในและ-setNeedsLayout -setNeedsUpdateConstraintsจาก Apple Docs: setNeedsLayout เรียกวิธีนี้ในเธรดหลักของแอปพลิเคชันของคุณเมื่อคุณต้องการปรับเค้าโครงของมุมมองย่อย วิธีนี้จะทำการบันทึกคำขอและส่งคืนทันที เนื่องจากวิธีนี้ไม่ได้บังคับให้มีการอัปเดตทันที แต่รอรอบการอัปเดตครั้งต่อไปคุณสามารถใช้วิธีนี้เพื่อทำให้เค้าโครงของมุมมองหลายมุมเป็นโมฆะก่อนที่มุมมองเหล่านั้นจะได้รับการอัปเดต ลักษณะการทำงานนี้ช่วยให้คุณสามารถรวมการปรับปรุงเค้าโครงทั้งหมดของคุณเข้ากับรอบการอัปเดตเดียวซึ่งมักจะดีกว่าสำหรับประสิทธิภาพ setNeedsUpdateConstraints เมื่อคุณสมบัติของมุมมองที่กำหนดเองของคุณเปลี่ยนไปในแบบที่จะส่งผลกระทบต่อข้อ จำกัด คุณสามารถเรียกวิธีนี้เพื่อระบุว่าข้อ จำกัด จำเป็นต้องได้รับการปรับปรุงในบางจุดในอนาคต จากนั้นระบบจะเรียกใช้ updateConstraints โดยเป็นส่วนหนึ่งของเค้าโครงผังปกติ การอัปเดตข้อ จำกัด ทั้งหมดในครั้งเดียวก่อนที่จะมีความจำเป็นต้องมั่นใจว่าคุณไม่จำเป็นต้องคำนวณข้อ จำกัด โดยไม่จำเป็นเมื่อมีการเปลี่ยนแปลงหลายอย่างในมุมมองของคุณระหว่างการส่งผ่านเลย์เอาต์ เมื่อฉันต้องการทำให้มุมมองเคลื่อนไหวหลังจากแก้ไขข้อ จำกัด และทำให้การเปลี่ยนแปลงที่ฉันมักจะเรียกเช่น: [UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [self.modifConstrView setNeedsUpdateConstraints]; [self.modifConstrView layoutIfNeeded]; } completion:NULL]; ฉันพบว่าถ้าฉันใช้-setNeedsLayoutแทน-setNeedsUpdateConstraintsทุกอย่างทำงานตามที่คาดไว้ แต่ถ้าฉันเปลี่ยน-layoutIfNeededด้วย-updateConstraintsIfNeededภาพเคลื่อนไหวจะไม่เกิดขึ้น …

15
UITextView ที่ขยายเป็นข้อความโดยใช้เค้าโครงอัตโนมัติ
ฉันมีมุมมองที่จัดวางอย่างสมบูรณ์โดยใช้การจัดวางอัตโนมัติโดยทางโปรแกรม ฉันมี UITextView ตรงกลางของมุมมองพร้อมรายการด้านบนและด้านล่าง ทุกอย่างทำงานได้ดี แต่ฉันต้องการขยาย UITextView เมื่อเพิ่มข้อความ สิ่งนี้ควรผลักทุกอย่างลงไปด้านล่างขณะที่ขยาย ฉันรู้วิธีการทำสิ่งนี้ด้วยวิธี "สปริงและเสา" แต่มีวิธีเลย์เอาต์อัตโนมัติในการทำสิ่งนี้หรือไม่? วิธีเดียวที่ฉันคิดได้คือการลบและเพิ่มข้อ จำกัด ใหม่ทุกครั้งที่ต้องการเติบโต

16
ไม่สามารถตอบสนองข้อ จำกัด พร้อมกันได้จะพยายามกู้คืนโดยการทำลายข้อ จำกัด
ด้านล่างเป็นข้อความแสดงข้อผิดพลาดที่ฉันได้รับในพื้นที่แก้ไขข้อบกพร่อง มันทำงานได้ดีและไม่มีอะไรผิดปกติยกเว้นว่าฉันได้รับข้อผิดพลาดนี้ สิ่งนี้จะป้องกันไม่ให้แอปเปิ้ลยอมรับแอปหรือไม่ ฉันจะแก้ไขได้อย่างไร 2012-07-26 01:58:18.621 Rolo[33597:11303] 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 …

13
ฉันสามารถเปลี่ยนคุณสมบัติตัวคูณสำหรับ NSLayoutConstraint ได้หรือไม่
ฉันสร้างมุมมองสองมุมมองในหนึ่งมุมมองจากนั้นเพิ่มข้อ จำกัด ระหว่างมุมมอง: _indicatorConstrainWidth = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f]; [_indicatorConstrainWidth setPriority:UILayoutPriorityDefaultLow]; _indicatorConstrainHeight = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f]; [_indicatorConstrainHeight setPriority:UILayoutPriorityDefaultLow]; [self addConstraint:_indicatorConstrainWidth]; [self addConstraint:_indicatorConstrainHeight]; ตอนนี้ฉันต้องการเปลี่ยนคุณสมบัติตัวคูณด้วยภาพเคลื่อนไหว แต่ฉันไม่สามารถหาวิธีเปลี่ยนคุณสมบัติตัวคูณได้ (ฉันพบ _coefficient ในคุณสมบัติส่วนตัวในไฟล์ส่วนหัว NSLayoutConstraint.h แต่เป็นไฟล์ส่วนตัว) ฉันจะเปลี่ยนคุณสมบัติตัวคูณได้อย่างไร วิธีแก้ปัญหาของฉันคือการลบข้อ จำกัด multiplerเก่าและเพิ่มใหม่มีมูลค่าแตกต่างกันสำหรับ

6
iOS: หนึ่งจะเคลื่อนไหวไปยังข้อ จำกัด การกำหนดค่าอัตโนมัติใหม่ (ความสูง) ได้อย่างไร
ผมไม่เคยทำงานร่วมกับautolayoutจำกัด ก่อน ฉันมีแอปใหม่ขนาดเล็กที่ฉันกำลังทำงานอยู่และสังเกตเห็นว่ามุมมองของ NIB เป็นค่าเริ่มต้นของการกำหนดค่าอัตโนมัติ ดังนั้นฉันคิดว่าฉันจะใช้โอกาสนี้ในการทำงานกับมันและพยายามคิดว่า Apple จะไปที่ไหนกับสิ่งนี้ ความท้าทายแรก: ฉันต้องการปรับขนาด MKMapView และฉันต้องการทำให้มันเคลื่อนไหวไปยังตำแหน่งใหม่ ถ้าฉันทำแบบนี้เหมือนเคย: [UIView animateWithDuration:1.2f animations:^{ CGRect theFrame = worldView.frame; CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170); worldView.frame = newFrame; }]; ... จากนั้น MKMapView จะ 'snap' กลับสู่ความสูงเดิมเมื่อใดก็ตามที่มีการอัปเดตมุมมองพี่น้อง (ในกรณีของฉันมีการอัปเดตชื่อของ UISegmentedControl [myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]) ดังนั้นสิ่งที่ฉันคิดว่าฉันต้องการจะทำคือการเปลี่ยนข้อ จำกัด ของ MKMapView จากการถูกเท่ากับสูงมุมมองของผู้ปกครองที่จะเป็นญาติไปด้านบนของ UISegmentedControl …

7
การจัดวางอัตโนมัติ: เพิ่มข้อ จำกัด ให้กับ superview และไม่ใช่ Top Layout Guide?
ฉันมี UIView ใน UIViewController ในสตอรี่บอร์ดซึ่งฉันต้องการเพิ่มข้อ จำกัด ให้กับพื้นที่ที่มองเห็นระยะทางจากขอบด้านบน ตอนนี้เมื่อฉันทำตามปกติโดย ctrl + ลากไปที่มุมมองหลักของ ViewController ฉันจะได้รับตัวเลือกเพื่อตั้งค่าเป็นคำแนะนำเค้าโครงด้านบนเท่านั้น นี่เป็นปัญหาสำหรับฉันเพราะเมื่อถึงจุดหนึ่งในแอปฉันจะย้ายมุมมองหลักขึ้นประมาณ 20-50px และสิ่งที่เกิดขึ้นคือมุมมองนั้นฉันจะไม่ขยับ ... เพราะมันไม่สอดคล้องกับ superview ฉันจะทำสิ่งนี้ด้วยตนเองในสตอรีบอร์ดได้อย่างไรหรือต้องเพิ่มแบบเป็นโปรแกรม? ฉันใช้ xcode 6

6
จะเกิดอะไรขึ้นกับข้อ จำกัด เมื่อมุมมองถูกลบออก
คำถามที่ฉันมีนั้นง่ายมาก แต่ฉันไม่พบข้อมูลใด ๆ ในเอกสาร จะเกิดอะไรขึ้นกับข้อ จำกัด ของโครงร่างเมื่อมุมมองถูกลบออกจากลำดับชั้นของมุมมอง (หรือย้ายไปยังมุมมองอื่น) ตัวอย่างเช่นสมมติมีภาชนะCที่มี subviews และA Bคอนเทนเนอร์Cมีข้อ จำกัด บางประการ จากนั้นเราโทร[A removeFromSuperview]. เกิดอะไรขึ้นกับข้อ จำกัด สำหรับA? แล้วอะไรจะเกิดขึ้นถ้าเราเพิ่มAไปCอีกครั้งหรือไม่

10
ปัญหาข้อ จำกัด การจัดวางอัตโนมัติบน iOS7 ใน UITableViewCell
ฉันใช้ข้อ จำกัด การจัดวางอัตโนมัติโดยทางโปรแกรมเพื่อจัดวางเซลล์ UITableView ที่กำหนดเองของฉันและฉันกำหนดขนาดเซลล์อย่างถูกต้องใน tableView:heightForRowAtIndexPath: มันทำงานได้ดีบน iOS6 และมันก็ดูดีใน iOS7 เช่นกัน แต่เมื่อฉันเรียกใช้แอปบน iOS7 นี่คือประเภทของข้อความที่ฉันเห็นในคอนโซล: 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-10-02 09:56:44.847 Vente-Exclusive[76306:a0b] Unable to simultaneously satisfy constraints. Probably at least one …

8
ฉันจะเปิด / ปิดการใช้งานข้อ จำกัด ของโครงร่างได้เมื่อใด
ฉันได้ตั้งค่าข้อ จำกัด หลายชุดใน IB และฉันต้องการสลับระหว่างข้อ จำกัด โดยทางโปรแกรมขึ้นอยู่กับสถานะบางอย่าง มีconstraintsAคอลเลกชันเต้าเสียบทั้งหมดซึ่งทำเครื่องหมายว่าติดตั้งจาก IB และconstraintsBคอลเลกชันเต้าเสียบซึ่งทั้งหมดถูกถอนการติดตั้งใน IB ฉันสามารถสลับระหว่างสองชุดโดยทางโปรแกรมได้ดังนี้: NSLayoutConstraint.deactivateConstraints(constraintsA) NSLayoutConstraint.activateConstraints(constraintsB) แต่ ... ฉันคิดไม่ออกว่าจะทำอย่างนั้นเมื่อไหร่ ดูเหมือนว่าฉันควรจะทำแบบนั้นได้ในครั้งเดียวviewDidLoadแต่ก็ไม่สามารถทำได้ ฉันได้ลองโทรview.updateConstraints()และview.layoutSubviews()หลังจากตั้งค่าข้อ จำกัด แล้ว แต่ก็ไม่มีประโยชน์ ฉันพบว่าถ้าฉันตั้งค่าข้อ จำกัด ในviewDidLayoutSubviewsทุกอย่างทำงานได้ตามที่คาดไว้ ฉันเดาว่าฉันอยากรู้สองสิ่ง ... ทำไมฉันถึงได้รับพฤติกรรมนี้ เป็นไปได้หรือไม่ที่จะเปิด / ปิดข้อ จำกัด จาก viewDidLoad?

9
จะอัปเดตข้อจำกัดความสูงคงที่ของ UIView แบบเป็นโปรแกรมได้อย่างไร
ฉันมี UIViewและตั้งข้อ จำกัด โดยใช้ Xcode Interface Builder ตอนนี้ฉันต้องการอัปเดตสิ่งนั้น UIViewค่าคงที่ความสูงของอินสแตนซ์นั้นโดยทางโปรแกรม มีฟังก์ชั่นที่เหมือนmyUIView.updateConstraints()แต่ไม่รู้จะใช้ยังไง

3
ข้อ จำกัด “ ความกว้างเท่ากับความสูง” ในตัวสร้างอินเทอร์เฟซ
ฉันไม่พบวิธีสร้างข้อ จำกัด "สี่เหลี่ยมจัตุรัส" ซึ่งหมายความว่า "ความกว้างเท่ากับความสูง" ในตัวสร้างอินเทอร์เฟซ ฉันเดาว่าเป็นไปได้ที่จะเพิ่มข้อ จำกัด ดังกล่าวโดยใช้โปรแกรม มีอะไรที่ฉันสามารถทำได้ใน IB? บางทีฉันอาจจะไม่เห็นมัน? ดูเหมือนเป็นเรื่องเล็กน้อย แต่ฉันหาไม่เจอ

7
ฉันจะตั้งค่าข้อ จำกัด อัตราส่วนโดยใช้โปรแกรมใน iOS ได้อย่างไร
ฉันใช้รูปแบบอัตโนมัติสำหรับตัวควบคุมมุมมองของฉัน ฉันตั้งค่าตำแหน่ง V และ H ไว้ในข้อ จำกัด แต่ฉันต้องการทราบว่าฉันจะเพิ่มขนาดปุ่มได้อย่างไรเมื่อเปลี่ยนเป็น 5s, 6 และ 6 Plus นี่เป็นวิธีที่ฉันเพิ่มข้อ จำกัด สำหรับปุ่มเข้าสู่ระบบ: NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary]; [btnLogin addConstraints:btncon_V]; NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_H]; NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_V]; แต่ปัญหาของฉันคือในขณะที่จัดการช่องว่างด้านซ้ายและด้านขวา แต่ iPhone 6 และ 6 Plus ได้รับการยืดออกเนื่องจากความสูงได้รับการแก้ไขแล้ว ฉันจะเพิ่มขนาดตามขนาดหน้าจอได้อย่างไร? ฉันคิดว่านี่อาจเป็นอัตราส่วนภาพ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.