我在IB中设计了自定义Cell,将其子类化并将我的插座连接到我的自定义类.我在单元格内容中有三个子视图:UIView(cdView)和两个标签(titleLabel和emailLabel).根据每行可用的数据,有时我想在我的单元格中显示UIView和两个标签,有时只有两个标签.我想要做的是设置约束,如果我将UIView属性设置为隐藏或我将从superview中删除它,两个标签将移动到左侧.我尝试将UIView前导约束设置为10px的Superview(单元格内容)和UILabels将10 px的约束引导到下一个视图(UIView).稍后在我的代码中
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(IndexPath *)indexPath {
...
Record *record = [self.records objectAtIndex:indexPath.row];
if ([record.imageURL is equalToString:@""]) {
cell.cdView.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)
我隐藏了我的cell.cdView,我希望标签向左移动,但是它们在Cell中保持相同的位置.我试图从superview中删除cell.cdView,但它也没有用.我附上图片来澄清我的意思.

我知道如何以编程方式执行此操作,而我不是在寻找解决方案.我想要的是在IB中设置约束,并且如果删除或隐藏其他视图,我希望我的子视图将动态移动.是否可以在具有自动布局的IB中执行此操作?
.....
Run Code Online (Sandbox Code Playgroud) 自动布局,尽管它是好的,让我疯狂的约束.我有在IB设计的肖像模式,但我无法获得所需的横向方向.

请注意,当方向更改为横向时,UIImageView块之间的间距会减小,并且SAMPLE TEXT更改的文本对齐方式会右对齐.
目前,我已经为它添加了一些限制.但是,我需要保持UIImageView块之间的空间固定,因此它看起来像肖像和景观中的精细.我需要将它均匀地分布在肖像中并在景观中压缩(如上图所示).同样,目前我的约束会调出文本,但它不会将其保持在屏幕的中心并且右对齐.
自动布局可以实现这一点吗?如果是这样,怎么样?非常感谢.
我以编程方式创建了一个UIView并将NSLayoutConstraint添加到它并且它可以工作,然后将其添加为视图控制器视图的子视图.现在我需要从superview中删除此视图,稍后再添加一次.但是如果我再次添加它,布局将不再起作用self.view addSubview.如何使布局再次工作?
我遇到了麻烦.我有一个城市列表,我想显示城市UITableView,我已禁用UITableView的滚动,因为我不想显示滚动.
当我动态更改为UITableView的高度时,它不会更改,UITableView不会显示所有城市.代码下方.请看看.
import UIKit
class FlightDetailsOneWayViewController: UIViewController {
var flightDetailArr:[FlightDetailsOneWay] = [FlightDetailsOneWay]()
@IBOutlet var tableView: UITableView!
@IBOutlet var scrollview: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
flightDetailArr.append(FlightDetailsOneWay(depCity: "London"))
flightDetailArr.append(FlightDetailsOneWay(depCity: "China"))
flightDetailArr.append(FlightDetailsOneWay(depCity: "Singapore"))
flightDetailArr.append(FlightDetailsOneWay(depCity: "Dubai"))
self.tableView.scrollEnabled = false
var cellHeight = CGFloat(self.tableView.rowHeight)
var totalCity = CGFloat(flightDetailArr.count)
var totalHeight = cellHeight * totalCity
self.tableView.frame.size.height = CGFloat(totalHeight)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { …Run Code Online (Sandbox Code Playgroud) 我在View Controller的UIImgeView实例上设置.Width和.Top NSLayoutConstraints updateViewConstraints()。在XCode可视调试器中,我可以看到约束实际上已设置,但是由于某些原因,约束没有被使用(?),它们显示为un(内容大小),并且显示为灰色。当我使用NSLog输出约束时,我也可以看到它们已设置,但是以某种方式图像保持原始大小...这是什么意思?
constraints in parent: [<NSLayoutConstraint:0x7b379590 UIImageView:0x7af897b0.centerX == UIView:0x7b37d2e0.centerX>,
<NSLayoutConstraint:0x7b36e3d0 V:|-(0)-[UIImageView:0x7af897b0] (Names: '|':UIView:0x7b37d2e0 )>]
constraints in view: [<NSContentSizeLayoutConstraint:0x7ae892b0 H:[UIImageView:0x7af897b0(301)] Hug:251 CompressionResistance:750>,
<NSContentSizeLayoutConstraint:0x7ae834e0 V:[UIImageView:0x7af897b0(365)] Hug:251 CompressionResistance:750>]
Run Code Online (Sandbox Code Playgroud)
设置约束的代码:
/// Image view with the character + ellipse
@IBOutlet weak var charImageView: UIImageView!
override func updateViewConstraints() {
super.updateViewConstraints()
charImageView.widthLayoutConstraint?.constant = 301.0
charImageView.heightLayoutConstraint?.constant = 365.0
}
Run Code Online (Sandbox Code Playgroud)
我用来获取扩展名widthLayoutConstraint和heightLayoutConstraint
extension UIView{
/**
Gets the width layout constraint defined as the NSLayoutConstraint whose first item is self and first attribute is Height …Run Code Online (Sandbox Code Playgroud) ios ×5
autolayout ×3
swift ×2
cocoa-touch ×1
constraints ×1
iphone ×1
layout ×1
objective-c ×1
uitableview ×1
uiview ×1
xcode ×1