Xcode 6中UITableView中的自动调整大小问题

Xcode 6中UITableView中的自动调整大小问题,uitableview,ios7,storyboard,xcode6,autoresizingmask,Uitableview,Ios7,Storyboard,Xcode6,Autoresizingmask,我在UITableview的xcode 6中使用自动调整大小功能,但它不能正常工作。我想使用自动调整大小。我已经在脚本中的UITableviewController类的静态单元格中添加了文本字段。文本字段位于屏幕外的横向或纵向。我不想使用自动布局我的整个项目是在自动调整大小 这是Xcode 6.xib和.storyboard处理问题。很快,Xcode将不正确的框架设置为表视图单元格及其contentView。让我更深入地解释一下 自动调整遮罩的工作原理 基本上,它将视图的frame绑定到其超级视

我在UITableview的xcode 6中使用自动调整大小功能,但它不能正常工作。我想使用自动调整大小。我已经在脚本中的UITableviewController类的静态单元格中添加了文本字段。文本字段位于屏幕外的横向或纵向。我不想使用自动布局我的整个项目是在自动调整大小


这是Xcode 6.xib和.storyboard处理问题。很快,Xcode将不正确的框架设置为表视图单元格及其
contentView
。让我更深入地解释一下

自动调整遮罩的工作原理 基本上,它将视图的
frame
绑定到其超级视图的
frame
。我们可以指定哪些边距和尺寸是灵活的,哪些是固定的。 当superview更改其边界时,我们的视图边界也将根据我们的自动调整大小规范进行更改。 这不仅发生在运行时,而且也发生在Xcode Interface Builder中。尝试使用子视图创建一些视图,为子视图设置不同的自动调整大小选项,并调整主视图的大小。您将看到在Xcode中对子视图进行了调整。方便吗

错误的来源 我第一次发现完全相同的问题是在将表视图单元格从iPhone情节提要复制到iPad情节提要之后。 在深入研究.storyboard文件后,我发现该单元格及其
contentView
在.storyboard中仍有帧320x91(而不是iPad大小768x91),而在屏幕和inspectors中,两者的大小都是正确的。实际序列化数据和可视化表示之间不一致


因此,当我根据iPad大小(例如x=“624”y=“19”width=“80”height=“21”)和灵活的左边距设置单元格子视图
框架时。它在内部超出了单元格的边界,而在视觉上它仍然显示为正确设置。当故事板保存并从文件中重新加载时,单元格及其
contentView
会自动从320x91调整到768x91,并且由于其自动调整大小,该子视图会自动向右移动

现在让我们来看看你的案子。您有宽度灵活的文本字段。每次我打开这个项目,它的框架就变得越来越宽。看起来存储宽度和可视宽度之间存在相同的不一致性。打开项目的.storyboard后,我们可以看到表视图单元格及其
contentView
都没有指定任何
框架
!所以我们可以说,在您的例子中,Xcode隐式地为您的单元格及其
contentView
设置了一些非常小的帧

这就是它里面的样子


如何修复 目前还没有找到最终的解决方案,但是我们可以解决这个bug。如果Xcode本身无法设置正确的帧,我们可以手动设置。使用任何文本编辑器(纯XML)打开故事板并修复框架:



然后关闭Xcode,从编辑器中保存情节提要,然后重新打开Xcode。瞧!文本字段已脱离疯狂状态,现在的行为符合预期。

我最近也遇到了同样的问题。我在UITableViewCell的内容视图中添加了一个标签,每次隐藏时(x>>320)。我意识到问题出在源代码XML中

XML是:

<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="InvoiceCell" rowHeight="60" id="B9T-xx-TCx" customClass="InvoiceCell"> 
    // My custom cell is 60 height
    <rect key="frame" x="0.0" y="0.0" width="320" height="44"/> 
    // Wrong Autoresizing
    <autoresizingMask key="autoresizingMask"/> 
    <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="B9T-xx-TCx" id="nvL-MG-mGs">
        //No rect frame and wrong autoresizing mask
        <autoresizingMask key="autoresizingMask"/>

//我的定制手机是60高
//错误的自动调整大小
//无矩形框和错误的自动调整大小掩码
要解决我的问题,只需将“tableViewCell”和“tableViewCellContentView”更改为:


//在中添加/更改这两行


//在中添加/更改这两行

所以,问题解决了!我希望这对你们有帮助。

经过几个小时的处理,我只是在
CellForRowatineXpath
中手动设置帧

在我的情况下,我的标签应该总是离牢房右边缘8点远。。。我会运行它,标签就会消失。因此,在
cellforrowatinexpath
中,我添加了一点“hack”来修复框架

if (cell.weight.frame.origin.x != cell.frame.size.width - 138) {
    CGRect frame = cell.weight.frame;
    frame.origin.x = cell.frame.size.width - 138;
    cell.weight.frame = frame;
}
138在这种情况下,是我的标签的宽度(131)加上我想要的单元格右侧的填充物(7)

虽然不太好看,但它很管用
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="B9T-xx-TCx" id="nvL-MG-mGs">
    //Add/change this 2 lines in <tableViewCellContentView>
    <rect key="frame" x="0.0" y="0.0" width="320" height="60"/>
    <autoresizingMask key="autoresizingMask" widthSizable="YES"/>
if (cell.weight.frame.origin.x != cell.frame.size.width - 138) {
    CGRect frame = cell.weight.frame;
    frame.origin.x = cell.frame.size.width - 138;
    cell.weight.frame = frame;
}