Viv*_*dav 22 storyboard uitableview autoresizingmask ios7 xcode6
我在UITableview中使用xcode 6中的自动调整大小但它无法正常工作.我想使用autoresizing.I在故事板的UITableviewController类中的静态单元格中添加了textfield.屏幕外的文本字段无论是横向还是纵向.我不想使用autolayout我的整个项目是自动化. 
Cem*_*men 31
它是Xcode 6 .xib和.storyboard处理问题.不久,Xcode将不正确的帧设置为表格视图单元及其contentView.让我解释一下.
基本上,它限制frame了它的超级视图frame.我们可以指定哪些边距和尺寸将是灵活的以及将要修复的内容.当superview改变其边界时,我们的视图边界也将根据我们的自动调整规范而改变.这不仅发生在运行时,也发生在Xcode Interface Builder中.尝试使用子视图创建一些视图,为子视图设置不同的自动调整大小选项并调整主视图的大小.您将看到在Xcode中调整子视图的大小.方便,对吧?
在将表格视图单元格从iPhone故事板复制到iPad故事板后,我首先发现了完全相同的问题.在深入了解.storyboard文件后,我发现该单元格contentView仍然在.storyboard中有320x91(而非iPad尺寸为768x91)的框架,而在屏幕和检查器中它们都是正确的尺寸.它是实际序列化数据和可视化表示之间的不一致.
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="91" sectionHeaderHeight="22" sectionFooterHeight="22" id="nKc-Lp-03y">
<rect key="frame" x="0.0" y="58" width="768" height="901"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="PriceEvaluateCell" rowHeight="91" id="cis-7J-9wV" customClass="PriceEvaluateCell">
<rect key="frame" x="0.0" y="434" width="320" height="91"/>
<!-- note how small frame is! But it is drawn with iPad width -->
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cis-7J-9wV" id="cYU-lI-DGN">
<rect key="frame" x="0.0" y="0.0" width="320" height="90"/>
<!-- here is same issue -->
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="TItle" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="AOE-zL-Dv0">
<rect key="frame" x="9" y="3" width="305" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<!-- this view draws OK, it has small size, left alignment and flexible right margin -->
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="FGPrice" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="wPa-dC-JzV">
<rect key="frame" x="623" y="20" width="104" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<!-- this is bad view, it has flexible LEFT and will misplace every time you open the file -->
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.40000000600000002" green="1" blue="0.40000000600000002" alpha="1" colorSpace="calibratedRGB"/>
<color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</label>
</subviews>
</tableViewCellContentView>
<connections>
<!-- ... -->
</connections>
</tableViewCell>
</prototypes>
<connections>
<!-- ... -->
</connections>
</tableView>
Run Code Online (Sandbox Code Playgroud)
因此,当我frame根据iPad尺寸设置单元子视图时(例如x ="624"y ="19"width ="80"height ="21"),并且灵活的左边距.它在内部超出了单元格的界限,而在视觉上它仍然可以正确设置.当故事板保存然后从文件中重新加载时,单元格及其contentView自动从320x91调整为768x91,并且该子视图由于其自动调整而自动进行.
现在让我们来看看你的情况.您的文本字段具有灵活的宽度.每次打开项目时,它的框架都会越来越宽.看起来存储的宽度和视觉宽度之间的相同不一致.在打开项目的.storyboard后,我们可以看到表视图单元格和它contentView没有任何frame指定!所以我们可以说,在你的情况下,Xcode隐式地为你的单元格和它设置一些非常小的框架contentView.
这就是它内在的样子.
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="246" sectionHeaderHeight="22" sectionFooterHeight="22" id="zuY-va-uVD">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<sections>
<tableViewSection id="KFU-cy-GoW">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="245" id="WCc-Ec-YKn">
<!-- note there is no frame at all -->
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCc-Ec-YKn" id="DtD-vs-Xwy">
<!-- and here too -->
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="autorsizing" borderStyle="roundedRect" minimumFontSize="17" id="NCA-qk-Isa">
<!-- and here frame is already went wrong... -->
<rect key="frame" x="60" y="108" width="900" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.89019607840000003" green="0.89019607840000003" blue="0.89019607840000003" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="1kU-E8-zzp" id="pca-5d-SRg"/>
<outlet property="delegate" destination="1kU-E8-zzp" id="WxC-Qa-ToS"/>
</connections>
</tableView>
Run Code Online (Sandbox Code Playgroud)
目前尚无最终解决方案,但我们可以解决这个问题.如果Xcode本身无法设置正确的帧,我们可以手动完成.使用任何文本编辑器(它是纯XML)打开故事板并修复框架:
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="246" sectionHeaderHeight="22" sectionFooterHeight="22" id="zuY-va-uVD">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<sections>
<tableViewSection id="KFU-cy-GoW">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="245" id="WCc-Ec-YKn">
<autoresizingMask key="autoresizingMask"/>
<!-- we insert the correct frame (exact size we can get from xcode editor, which draws it properly) -->
<rect key="frame" x="0.0" y="0.0" width="320" height="245"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WCc-Ec-YKn" id="DtD-vs-Xwy">
<!-- and here we do the same -->
<rect key="frame" x="0.0" y="0.0" width="320" height="244"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="autorsizing" borderStyle="roundedRect" minimumFontSize="17" id="NCA-qk-Isa">
<!-- set any size that is smaller than parent frame. You will be able to change it with Xcode later -->
<rect key="frame" x="60" y="108" width="200" height="30"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.89019607840000003" green="0.89019607840000003" blue="0.89019607840000003" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="1kU-E8-zzp" id="pca-5d-SRg"/>
<outlet property="delegate" destination="1kU-E8-zzp" id="WxC-Qa-ToS"/>
</connections>
</tableView>
Run Code Online (Sandbox Code Playgroud)
然后关闭Xcode,从编辑器中保存故事板,然后重新打开Xcode.瞧!文本字段离开了它的疯狂方式,现在表现得像预期的那样.
rcm*_*ark 11
我最近遇到了同样的问题.我在UITableViewCell的内容视图中添加了一个标签,每次都隐藏(x >> 320).我意识到问题出在SOURCE CODE 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"/>
Run Code Online (Sandbox Code Playgroud)
要解决我的问题,只需将"tableViewCell"和"tableViewCellContentView"更改为:
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="InvoiceCell" rowHeight="60" id="B9T-xx-TCx" customClass="InvoiceCell">
//Add/change this 2 lines in <tableViewCell>
<rect key="frame" x="0.0" y="0.0" width="320" height="60"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES"/>
Run Code Online (Sandbox Code Playgroud)
和
<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"/>
Run Code Online (Sandbox Code Playgroud)
所以,问题解决了!我希望这能帮到你们.
| 归档时间: |
|
| 查看次数: |
7552 次 |
| 最近记录: |