如何将UIImageView设置为标题,这样内容就不会被拉伸



如果我执行以下操作,则titleView将被拉伸:

UIImage * img =[UIImage imageNamed:@"isikota_small.png"];
UIImageView * uiImage= [[UIImageView alloc]initWithImage:img];
self.navigationItem.titleView = uiImage;
PO(self.navigationItem.titleView);

如果我做

UIImage * img =[UIImage imageNamed:@"isikota_small.png"];
UIImageView * uiImage= [[UIImageView alloc]initWithImage:img];
uiImage.frame = CGRectMake(0,0,66,33);
uiImage.autoresizingMask = UIViewAutoresizingFlexibleHeight;
//[self.navigationItem.titleView addAndResizeSubView:uiImage]; doesn't work

self.navigationItem.titleView = uiImage;
PO(self.navigationItem.titleView);

标题视图也将被拉伸。

如果我这样做:

UIImage * img =[UIImage imageNamed:@"isikota_small.png"];
UIImageView * uiImage= [[UIImageView alloc]initWithImage:img];
uiImage.frame = CGRectMake(0,0,66,33);
uiImage.autoresizingMask = UIViewAutoresizingFlexibleHeight;
//[self.navigationItem.titleView addAndResizeSubView:uiImage]; doesn't work
UIView * uiv = [[UIView alloc]init];
[uiv addSubview:uiImage];
uiv.frame = CGRectMake(127, 0, 66, 33);
uiv.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
self.navigationItem.titleView = uiv;
PO(self.navigationItem.titleView);

不知怎么的,苹果把uiv.frame改成了CGRectMake(127, 6, 66, 33)

必须有一个优雅的解决方案。

当您将自定义视图用作titleView,以及tableViews和其他类似用例中的页脚和页眉时,iOS将忽略视图框架的偏移部分,或以某种不易预测的方式更改它。为了解决这个问题,你需要创建一个容器视图,这样你的容器就有偏移量(0,0):

试试这样的东西:

UIImage * img =[UIImage imageNamed:@"isikota_small.png"];
UIImageView * uiImage= [[UIImageView alloc]initWithImage:img];
uiImage.frame = CGRectMake(127,0,66,33);
UIView * uiv = [[UIView alloc]init];
[uiv addSubview:uiImage];
uiv.frame = CGRectMake(0, 0, 66+127, 33);
self.navigationItem.titleView = uiv;

我不确定自动呼吸口罩是否也会把它扔掉,所以试着不戴口罩,看看你是否能得到你想要的行为。

最新更新