菜鸟教程小白 发表于 2022-12-12 14:59:38

ios - super View 更改大小时,UILabel 位置未调整


                                            <p><p>我对 iOS 和 Objective-C 还是很陌生。</p>

<p>我一直试图让以编程方式生成的 <code>UITableView</code> 正常工作。该表使用自定义 <code>UITableViewCell</code>,它位于它自己的 xib 文件 <code>MeetingsTableViewCell</code> 中。</p>

<p>.xib 的外观如下:</p>

<p> <a href="/image/pAay4.png" rel="noreferrer noopener nofollow"><img src="/image/pAay4.png" alt=".xib file"/></a> </p>

<p>以及日期字段的约束:</p>

<p> <a href="/image/p1B56.png" rel="noreferrer noopener nofollow"><img src="/image/p1B56.png" alt="date field constraints"/></a> </p>

<p>这是运行时的样子:</p>

<p> <a href="/image/2HGTN.png" rel="noreferrer noopener nofollow"><img src="/image/2HGTN.png" alt="simulation"/></a> </p>

<p>日期和 session 模式图标/标签在模拟中距离右侧太远了 55 个点(?)。</p>

<p>主视图 Controller 的宽度为 320(我似乎无法更改)。 .xib 的宽度为 375(我似乎也无法更改)。 55分。巧合?我猜不是。</p>

<p>当我使用调试 View 层次结构时,我发现 Cell Wrapper View 是 375 点。我添加了以下代码(可能超出了需要,但我只是在尝试一切以查看是否可以解决):</p>

<pre><code>cell.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
cell.autoresizesSubviews = true;
cell.cellWrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
cell.cellWrapperView.autoresizesSubviews = true;
</code></pre>

<p>我还确保我在 <code>MeetingsTableCellView.m</code> 文件中有 <code>layoutIfNeeded</code> 并添加了代码来调整 <code>cellWrapperView</code></p>

<pre><code>-(void)layoutIfNeeded {
    ;
    self.cellWrapperView.frame=self.contentView.bounds;
}
</code></pre>

<p>将 View 大小正确调整为 320,但没有移动日期和 session 模式图标/标签。</p>

<p>调试 View 现在如下所示:</p>

<p> <a href="/image/OmeJA.png" rel="noreferrer noopener nofollow"><img src="/image/OmeJA.png" alt="Debug View"/></a> </p>

<p>TableCellView 和它里面的每个全宽的东西都是 320 磅宽。根据调试 View ,日期和 session 模式图标/标签(正确)为 68 磅宽。 X 位置是 297。我不知道如何让日期和 session 模式图标/标签处于正确位置。</p>

<p>附带说明,如果我将手机转为横向,这些宽度都是 375 而不是 320,但现在不应该是 568 吗? </p>

<p>谢谢!</p>

<p>编辑:创建表的代码。</p>

<pre><code>self.meetings=meetings;
self.meetingsTable=[ initWithFrame:self.tableWrapperView.bounds];
self.meetingsTable.delegate = self;
self.meetingsTable.dataSource = self;
self.meetingsTable.autoresizesSubviews = true;
self.meetingsTable.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.tableWrapperView.autoresizesSubviews = true;

UINib *cellNib=;
;
;
;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为你有点过于复杂了。</p>

<p>首先,您不需要“cellWrapperView” - <code>contentView</code> 无法做到这一点。</p>

<p>其次,对于单元格布局,您的单元格类中不需要<em>任何</em>代码。</p>

<p>我做了一个快速测试,按照你的方式(大约)布置单元格:</p>

<p> <a href="/image/ZQmBL.png" rel="noreferrer noopener nofollow"><img src="/image/ZQmBL.png" alt="enter image description here"/></a> </p>

<p>这是结果(我经常使用背景颜色来帮助查看元素框架):</p>

<p> <a href="/image/0hJwN.png" rel="noreferrer noopener nofollow"><img src="/image/0hJwN.png" alt="enter image description here"/></a>
<a href="/image/AakV7.png" rel="noreferrer noopener nofollow"><img src="/image/AakV7.png" alt="enter image description here"/></a> </p>

<p>仅使用此代码即可完成...</p>

<pre><code>//
//MeetingsTableViewCell.h
//

#import &lt;UIKit/UIKit.h&gt;

@interface MeetingsTableViewCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UILabel *theTitleLabel;
@property (strong, nonatomic) IBOutlet UILabel *theSubTitleLabel;
@property (strong, nonatomic) IBOutlet UILabel *theDateLabel;
@property (strong, nonatomic) IBOutlet UIImageView *theImageView;
@property (strong, nonatomic) IBOutlet UILabel *theModeLabel;

@end
</code></pre>

<hr/>

<pre><code>//
//MeetingsTableViewCell.m
//

#import &#34;MeetingsTableViewCell.h&#34;

@implementation MeetingsTableViewCell

@end
</code></pre>

<hr/>

<pre><code>//
//TableXIBViewController.h
//

#import &lt;UIKit/UIKit.h&gt;

@interface TableXIBViewController : UIViewController &lt;UITableViewDelegate, UITableViewDataSource&gt;

@end
</code></pre>

<hr/>

<pre><code>//
//TableXIBViewController.m
//
//Created by Don Mag on 11/14/18.
//

#import &#34;TableXIBViewController.h&#34;
#import &#34;MeetingsTableViewCell.h&#34;

@interface TableXIBViewController ()

@property UITableView *meetingsTable;
@property UIView *tableWrapperView;

@end

@implementation TableXIBViewController

- (void)viewDidLoad {
    ;
    // Do any additional setup after loading the view.

    self.view.backgroundColor = ;

    // inset the table wrapper view by 20-pts so we can see its frame
    self.tableWrapperView = [ initWithFrame:CGRectInset(self.view.frame, 20, 20)];
    self.tableWrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    ;

    self.meetingsTable = [ initWithFrame:self.tableWrapperView.bounds];
    self.meetingsTable.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    self.meetingsTable.dataSource = self;
    self.meetingsTable.delegate = self;

    ;

    UINib *cellNib = ;
    ;

}

- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
    MeetingsTableViewCell *cell = ;

    cell.theTitleLabel.text = ;
    cell.theSubTitleLabel.text = ;
    cell.theDateLabel.text = ;

    return cell;
}

- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return5;
}

@end
</code></pre>

<hr/>

<p>而且,为了帮助正确布局单元格 xib,这里是 xib 源代码:</p>

<pre><code>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;
&lt;document type=&#34;com.apple.InterfaceBuilder3.CocoaTouch.XIB&#34; version=&#34;3.0&#34; toolsVersion=&#34;14109&#34; targetRuntime=&#34;iOS.CocoaTouch&#34; propertyAccessControl=&#34;none&#34; useAutolayout=&#34;YES&#34; useTraitCollections=&#34;YES&#34; useSafeAreas=&#34;YES&#34; colorMatched=&#34;YES&#34;&gt;
    &lt;device id=&#34;retina4_7&#34; orientation=&#34;portrait&#34;&gt;
      &lt;adaptation id=&#34;fullscreen&#34;/&gt;
    &lt;/device&gt;
    &lt;dependencies&gt;
      &lt;deployment identifier=&#34;iOS&#34;/&gt;
      &lt;plugIn identifier=&#34;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&#34; version=&#34;14088&#34;/&gt;
      &lt;capability name=&#34;Constraints to layout margins&#34; minToolsVersion=&#34;6.0&#34;/&gt;
      &lt;capability name=&#34;documents saved in the Xcode 8 format&#34; minToolsVersion=&#34;8.0&#34;/&gt;
    &lt;/dependencies&gt;
    &lt;objects&gt;
      &lt;placeholder placeholderIdentifier=&#34;IBFilesOwner&#34; id=&#34;-1&#34; userLabel=&#34;File&#39;s Owner&#34;/&gt;
      &lt;placeholder placeholderIdentifier=&#34;IBFirstResponder&#34; id=&#34;-2&#34; customClass=&#34;UIResponder&#34;/&gt;
      &lt;tableViewCell clipsSubviews=&#34;YES&#34; contentMode=&#34;scaleToFill&#34; preservesSuperviewLayoutMargins=&#34;YES&#34; selectionStyle=&#34;default&#34; indentationWidth=&#34;10&#34; rowHeight=&#34;97&#34; id=&#34;1hH-Nh-Uud&#34; customClass=&#34;MeetingsTableViewCell&#34;&gt;
            &lt;rect key=&#34;frame&#34; x=&#34;0.0&#34; y=&#34;0.0&#34; width=&#34;407&#34; height=&#34;89&#34;/&gt;
            &lt;autoresizingMask key=&#34;autoresizingMask&#34;/&gt;
            &lt;tableViewCellContentView key=&#34;contentView&#34; opaque=&#34;NO&#34; clipsSubviews=&#34;YES&#34; multipleTouchEnabled=&#34;YES&#34; contentMode=&#34;center&#34; preservesSuperviewLayoutMargins=&#34;YES&#34; insetsLayoutMarginsFromSafeArea=&#34;NO&#34; tableViewCell=&#34;1hH-Nh-Uud&#34; id=&#34;mnL-wU-yle&#34;&gt;
                &lt;rect key=&#34;frame&#34; x=&#34;0.0&#34; y=&#34;0.0&#34; width=&#34;407&#34; height=&#34;88.5&#34;/&gt;
                &lt;autoresizingMask key=&#34;autoresizingMask&#34;/&gt;
                &lt;subviews&gt;
                  &lt;label opaque=&#34;NO&#34; userInteractionEnabled=&#34;NO&#34; contentMode=&#34;left&#34; horizontalHuggingPriority=&#34;251&#34; verticalHuggingPriority=&#34;252&#34; text=&#34;Meeting Title&#34; textAlignment=&#34;natural&#34; lineBreakMode=&#34;tailTruncation&#34; baselineAdjustment=&#34;alignBaselines&#34; adjustsFontSizeToFit=&#34;NO&#34; translatesAutoresizingMaskIntoConstraints=&#34;NO&#34; id=&#34;6hb-sQ-pY3&#34;&gt;
                        &lt;rect key=&#34;frame&#34; x=&#34;20&#34; y=&#34;11&#34; width=&#34;108&#34; height=&#34;21&#34;/&gt;
                        &lt;color key=&#34;backgroundColor&#34; red=&#34;0.45138680930000002&#34; green=&#34;0.99309605359999997&#34; blue=&#34;1&#34; alpha=&#34;1&#34; colorSpace=&#34;custom&#34; customColorSpace=&#34;sRGB&#34;/&gt;
                        &lt;fontDescription key=&#34;fontDescription&#34; type=&#34;boldSystem&#34; pointSize=&#34;17&#34;/&gt;
                        &lt;nil key=&#34;textColor&#34;/&gt;
                        &lt;nil key=&#34;highlightedColor&#34;/&gt;
                  &lt;/label&gt;
                  &lt;label opaque=&#34;NO&#34; userInteractionEnabled=&#34;NO&#34; contentMode=&#34;left&#34; horizontalHuggingPriority=&#34;251&#34; verticalHuggingPriority=&#34;251&#34; text=&#34;Meeting Subtitle&#34; textAlignment=&#34;natural&#34; lineBreakMode=&#34;tailTruncation&#34; baselineAdjustment=&#34;alignBaselines&#34; adjustsFontSizeToFit=&#34;NO&#34; translatesAutoresizingMaskIntoConstraints=&#34;NO&#34; id=&#34;gfu-sY-NvS&#34;&gt;
                        &lt;rect key=&#34;frame&#34; x=&#34;20&#34; y=&#34;57.5&#34; width=&#34;126&#34; height=&#34;20.5&#34;/&gt;
                        &lt;color key=&#34;backgroundColor&#34; red=&#34;0.45138680930000002&#34; green=&#34;0.99309605359999997&#34; blue=&#34;1&#34; alpha=&#34;1&#34; colorSpace=&#34;custom&#34; customColorSpace=&#34;sRGB&#34;/&gt;
                        &lt;fontDescription key=&#34;fontDescription&#34; type=&#34;italicSystem&#34; pointSize=&#34;17&#34;/&gt;
                        &lt;nil key=&#34;textColor&#34;/&gt;
                        &lt;nil key=&#34;highlightedColor&#34;/&gt;
                  &lt;/label&gt;
                  &lt;label opaque=&#34;NO&#34; userInteractionEnabled=&#34;NO&#34; contentMode=&#34;left&#34; horizontalHuggingPriority=&#34;251&#34; verticalHuggingPriority=&#34;251&#34; text=&#34;2018/01/01&#34; textAlignment=&#34;center&#34; lineBreakMode=&#34;tailTruncation&#34; baselineAdjustment=&#34;alignBaselines&#34; adjustsFontSizeToFit=&#34;NO&#34; translatesAutoresizingMaskIntoConstraints=&#34;NO&#34; id=&#34;fgW-SS-i5C&#34;&gt;
                        &lt;rect key=&#34;frame&#34; x=&#34;287&#34; y=&#34;11&#34; width=&#34;100&#34; height=&#34;22&#34;/&gt;
                        &lt;color key=&#34;backgroundColor&#34; red=&#34;0.45009386540000001&#34; green=&#34;0.98132258650000004&#34; blue=&#34;0.4743030667&#34; alpha=&#34;1&#34; colorSpace=&#34;custom&#34; customColorSpace=&#34;sRGB&#34;/&gt;
                        &lt;constraints&gt;
                            &lt;constraint firstAttribute=&#34;width&#34; constant=&#34;100&#34; id=&#34;PgK-nv-uVx&#34;/&gt;
                        &lt;/constraints&gt;
                        &lt;fontDescription key=&#34;fontDescription&#34; type=&#34;italicSystem&#34; pointSize=&#34;17&#34;/&gt;
                        &lt;nil key=&#34;textColor&#34;/&gt;
                        &lt;nil key=&#34;highlightedColor&#34;/&gt;
                  &lt;/label&gt;
                  &lt;label opaque=&#34;NO&#34; userInteractionEnabled=&#34;NO&#34; contentMode=&#34;left&#34; horizontalHuggingPriority=&#34;251&#34; verticalHuggingPriority=&#34;252&#34; text=&#34;Meeting Mode&#34; textAlignment=&#34;natural&#34; lineBreakMode=&#34;tailTruncation&#34; baselineAdjustment=&#34;alignBaselines&#34; adjustsFontSizeToFit=&#34;NO&#34; translatesAutoresizingMaskIntoConstraints=&#34;NO&#34; id=&#34;FBS-Cm-nZv&#34;&gt;
                        &lt;rect key=&#34;frame&#34; x=&#34;293.5&#34; y=&#34;62&#34; width=&#34;87&#34; height=&#34;16&#34;/&gt;
                        &lt;color key=&#34;backgroundColor&#34; red=&#34;0.45009386540000001&#34; green=&#34;0.98132258650000004&#34; blue=&#34;0.4743030667&#34; alpha=&#34;1&#34; colorSpace=&#34;custom&#34; customColorSpace=&#34;sRGB&#34;/&gt;
                        &lt;fontDescription key=&#34;fontDescription&#34; type=&#34;system&#34; pointSize=&#34;13&#34;/&gt;
                        &lt;nil key=&#34;textColor&#34;/&gt;
                        &lt;nil key=&#34;highlightedColor&#34;/&gt;
                  &lt;/label&gt;
                  &lt;imageView userInteractionEnabled=&#34;NO&#34; contentMode=&#34;scaleToFill&#34; horizontalHuggingPriority=&#34;251&#34; verticalHuggingPriority=&#34;251&#34; image=&#34;clip&#34; translatesAutoresizingMaskIntoConstraints=&#34;NO&#34; id=&#34;fS2-U6-2dk&#34;&gt;
                        &lt;rect key=&#34;frame&#34; x=&#34;326.5&#34; y=&#34;37&#34; width=&#34;21&#34; height=&#34;21&#34;/&gt;
                        &lt;constraints&gt;
                            &lt;constraint firstAttribute=&#34;height&#34; constant=&#34;21&#34; id=&#34;7U2-rp-N4R&#34;/&gt;
                            &lt;constraint firstAttribute=&#34;width&#34; constant=&#34;21&#34; id=&#34;cKC-6E-uQn&#34;/&gt;
                        &lt;/constraints&gt;
                  &lt;/imageView&gt;
                &lt;/subviews&gt;
                &lt;color key=&#34;backgroundColor&#34; red=&#34;0.99953407049999998&#34; green=&#34;0.98835557699999999&#34; blue=&#34;0.47265523669999998&#34; alpha=&#34;1&#34; colorSpace=&#34;custom&#34; customColorSpace=&#34;sRGB&#34;/&gt;
                &lt;constraints&gt;
                  &lt;constraint firstItem=&#34;fS2-U6-2dk&#34; firstAttribute=&#34;top&#34; secondItem=&#34;fgW-SS-i5C&#34; secondAttribute=&#34;bottom&#34; constant=&#34;4&#34; id=&#34;546-Qt-aMZ&#34;/&gt;
                  &lt;constraint firstItem=&#34;gfu-sY-NvS&#34; firstAttribute=&#34;top&#34; relation=&#34;greaterThanOrEqual&#34; secondItem=&#34;6hb-sQ-pY3&#34; secondAttribute=&#34;bottom&#34; constant=&#34;4&#34; id=&#34;5E7-Wh-Yzw&#34;/&gt;
                  &lt;constraint firstAttribute=&#34;bottomMargin&#34; secondItem=&#34;gfu-sY-NvS&#34; secondAttribute=&#34;bottom&#34; id=&#34;9Bw-TS-gRW&#34;/&gt;
                  &lt;constraint firstItem=&#34;FBS-Cm-nZv&#34; firstAttribute=&#34;centerX&#34; secondItem=&#34;fgW-SS-i5C&#34; secondAttribute=&#34;centerX&#34; id=&#34;G9b-b9-Ftn&#34;/&gt;
                  &lt;constraint firstItem=&#34;FBS-Cm-nZv&#34; firstAttribute=&#34;top&#34; secondItem=&#34;fS2-U6-2dk&#34; secondAttribute=&#34;bottom&#34; constant=&#34;4&#34; id=&#34;GP1-mc-D7y&#34;/&gt;
                  &lt;constraint firstItem=&#34;fS2-U6-2dk&#34; firstAttribute=&#34;centerX&#34; secondItem=&#34;fgW-SS-i5C&#34; secondAttribute=&#34;centerX&#34; id=&#34;SLu-6e-2Tb&#34;/&gt;
                  &lt;constraint firstAttribute=&#34;bottomMargin&#34; secondItem=&#34;FBS-Cm-nZv&#34; secondAttribute=&#34;bottom&#34; id=&#34;TmX-2b-f5B&#34;/&gt;
                  &lt;constraint firstAttribute=&#34;trailingMargin&#34; secondItem=&#34;fgW-SS-i5C&#34; secondAttribute=&#34;trailing&#34; id=&#34;V6K-33-cCn&#34;/&gt;
                  &lt;constraint firstItem=&#34;6hb-sQ-pY3&#34; firstAttribute=&#34;top&#34; secondItem=&#34;mnL-wU-yle&#34; secondAttribute=&#34;topMargin&#34; id=&#34;VkG-AA-ghx&#34;/&gt;
                  &lt;constraint firstItem=&#34;6hb-sQ-pY3&#34; firstAttribute=&#34;leading&#34; secondItem=&#34;mnL-wU-yle&#34; secondAttribute=&#34;leadingMargin&#34; id=&#34;osP-fz-3fL&#34;/&gt;
                  &lt;constraint firstItem=&#34;fgW-SS-i5C&#34; firstAttribute=&#34;top&#34; secondItem=&#34;mnL-wU-yle&#34; secondAttribute=&#34;topMargin&#34; id=&#34;paN-Pg-Bzz&#34;/&gt;
                  &lt;constraint firstItem=&#34;gfu-sY-NvS&#34; firstAttribute=&#34;leading&#34; secondItem=&#34;mnL-wU-yle&#34; secondAttribute=&#34;leadingMargin&#34; id=&#34;x4d-ek-CE0&#34;/&gt;
                &lt;/constraints&gt;
            &lt;/tableViewCellContentView&gt;
            &lt;connections&gt;
                &lt;outlet property=&#34;theDateLabel&#34; destination=&#34;fgW-SS-i5C&#34; id=&#34;33H-KL-zyk&#34;/&gt;
                &lt;outlet property=&#34;theImageView&#34; destination=&#34;fS2-U6-2dk&#34; id=&#34;vgC-kz-BOU&#34;/&gt;
                &lt;outlet property=&#34;theModeLabel&#34; destination=&#34;FBS-Cm-nZv&#34; id=&#34;BFI-rF-5c3&#34;/&gt;
                &lt;outlet property=&#34;theSubTitleLabel&#34; destination=&#34;gfu-sY-NvS&#34; id=&#34;0bF-xI-U6a&#34;/&gt;
                &lt;outlet property=&#34;theTitleLabel&#34; destination=&#34;6hb-sQ-pY3&#34; id=&#34;bRS-vo-UlK&#34;/&gt;
            &lt;/connections&gt;
            &lt;point key=&#34;canvasLocation&#34; x=&#34;-30.5&#34; y=&#34;19.5&#34;/&gt;
      &lt;/tableViewCell&gt;
    &lt;/objects&gt;
    &lt;resources&gt;
      &lt;image name=&#34;clip&#34; width=&#34;41&#34; height=&#34;42&#34;/&gt;
    &lt;/resources&gt;
&lt;/document&gt;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios -superView 更改大小时,UILabel 位置未调整,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/53305319/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/53305319/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - super View 更改大小时,UILabel 位置未调整