xib修改frame的正確姿式

在作動態添加view的功能的時候, 遇到設置xib的frame不許確的問題.具體功能需求以下圖bash

動態添加

具體的緣由所添加的黃色view在指定了frame的狀況下, 並無按照設定frame展現, 而是和父控件保持了一致, 以下圖:佈局

百度以後的解決辦法

在百度以後, 結果不少解決辦法都比較一致, 有這樣兩種辦法ui

  • 關閉Auto Layout, 下圖☑️取消

  • drawRect(在網上找的代碼, 這種寫法感受很怪)
-(id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSArray *nibs=[[NSBundle mainBundle]loadNibNamed:@"XPGovRecUnitView" owner:nil options:nil];
        self=[nibs objectAtIndex:0];
        
        tempframe = frame;
        
        [self initSubViews];
    }
    return self;
}
-(void)drawRect:(CGRect)rect
{
    self.frame = tempframe;
    
}
 
@end
複製代碼
  • layoutSubviews / viewDidLayoutSubviews 在正確的地方設置frame(但並非全部的狀況都適合這裏設置)

更合理的解決辦法

咱們得知道產生這個問題的緣由, 才能對症下藥, 其實主要就是針對Autoresizing進行設置spa

  • 經過對xib進行設置, 若是是高度不正確就修改裏面高度的上下箭頭, 寬度就修改左右

  • 經過代碼修改(推薦作法, 也比較方便), 設置 self.autoresizingMask = UIViewAutoresizingNone;, 代碼以下:
#import "TempView.h"

@implementation TempView

+ (instancetype)tempView {
    return [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil].firstObject;
}

- (void)awakeFromNib {
    [super awakeFromNib];
    // 起做用的代碼, 取消autoresizing佈局
    self.autoresizingMask = UIViewAutoresizingNone;
}

@end

複製代碼
相關文章
相關標籤/搜索