亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何以分組樣式設置UITableView中單元格的寬度

如何以分組樣式設置UITableView中單元格的寬度

iOS
慕哥6287543 2019-11-05 15:29:08
我已經為此工作了大約2天,因此我想與您分享我的經驗。問題是:是否可以使分組的UITableView中的單元格寬度變小?答案是不。但是有兩種方法可以解決此問題。解決方案#1:表格更薄 可以更改tableView的框架,以使表格變小。這將導致UITableView以減小的寬度呈現內部單元格。解決方案如下所示:-(void)viewWillAppear:(BOOL)animated{    CGFloat tableBorderLeft = 20;    CGFloat tableBorderRight = 20;    CGRect tableRect = self.view.frame;    tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin    tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table    tableView.frame = tableRect;}解決方案2:讓單元格由圖像渲染此解決方案的說明如下:http : //cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html希望這些信息對您有所幫助。我花了大約2天的時間嘗試了很多可能性。這就是剩下的。
查看完整描述

3 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

一種更好,更干凈的方法是將UITableViewCell子類化并覆蓋其-setFrame:方法,如下所示:


- (void)setFrame:(CGRect)frame {

    frame.origin.x += inset;

    frame.size.width -= 2 * inset;

    [super setFrame:frame];

}

為什么會更好?因為其他兩個更糟。


在中調整表格視圖寬度 -viewWillAppear:


首先,這是不可靠的,在-viewWillAppear:調用后,超級視圖或父視圖控制器可能會進一步調整表視圖框架。當然,您可以-setFrame:為UITableView 子類化和重寫,就像我在這里為UITableViewCells所做的一樣。但是,對UITableViewCells進行子類化是一種非常普遍,輕便和Apple的方式。


其次,如果您的UITableView具有backgroundView,則不希望將backgroundView一起縮小。在縮小UITableView寬度的同時保持backgroundView寬度并不是一件容易的事,更不用說首先將子視圖擴展到其Superview之外并不是一件很優雅的事情。


自定義單元格渲染以偽造更窄的寬度


為此,您必須準備帶有水平邊距的特殊背景圖像,并且必須自己布置單元格的子視圖以容納邊距。相比之下,如果您只是調整整個單元格的寬度,則自動調整大小將為您完成所有工作。


查看完整回答
反對 回復 2019-11-05
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

要在不提供設置變量方法的Swift中進行此操作,您必須覆蓋的setter frame。原帖(至少在我找到它)在這里


override var frame: CGRect {

    get {

        return super.frame

    }

    set (newFrame) {

        let inset: CGFloat = 15

        var frame = newFrame

        frame.origin.x += inset

        frame.size.width -= 2 * inset

        super.frame = frame

    }

}


查看完整回答
反對 回復 2019-11-05
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

我發現接受的解決方案在旋轉時不起作用。為了實現具有固定寬度和靈活邊距的UITableViewCells,我將上述解決方案調整為以下內容:


- (void)setFrame:(CGRect)frame {


    if (self.superview) {

        float cellWidth = 500.0;

        frame.origin.x = (self.superview.frame.size.width - cellWidth) / 2;

        frame.size.width = cellWidth;

    }


    [super setFrame:frame];

}

每當設備旋轉時都會調用該方法,因此單元將始終居中。


查看完整回答
反對 回復 2019-11-05
  • 3 回答
  • 0 關注
  • 614 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號