我有一个像这样设置的UIButton:
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.backgroundColor = [UIColor redColor];
[self addSubview:button];
[button setTitle:@"myButton" forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样(非红色是按钮后面的背景):

如果我设置[button setContentEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)]结果看起来一样.
如果我设置[button setContentEdgeInsets:UIEdgeInsetsMake(1, 0, 1, 0)]结果如下:

如果我设置[button setContentEdgeInsets:UIEdgeInsetsMake(-1, 0, -1, 0)]结果如下:

为什么看起来像1.0的顶部和底部有一个正内容插入会给出一个小于0的内容(我从文档中理解这是默认的)?我在Xcode 6和iOS 7中运行.
我搜索了高低,似乎无法找到答案.我见过的最接近的是: 更改帧时UITextView光标位于帧下方
对不起,没有截图,因为我(几乎)没有声望,但它看起来类似于链接的SO帖子.
当我在iOS6上运行应用程序时,事情工作正常(内容滚动光标以使其保持在屏幕上),但在iOS7上,光标超出了UITextView的末尾.我尝试添加UIEdgeInsets来移动内容,但是当用户主动输入文本时,它只是不断添加新行,直到光标位于文本视图的末尾.
我的布局包含一个Label(headerText),下面有一个UITextView(textView).此视图显示在选项卡栏中.添加了一个键盘输入附件,但在调用该功能之前,它的高度会自动计算到键盘高度.
这是我用来调整视图大小的函数,从键盘显示/隐藏委托,旋转,初始布局等调用:
-(void)resizeViewsWithKbdHeight:(float)kbHeight
{
//set the header label frame
//set constraints
//total view width - 30 (15 each for left and right padding)
CGFloat labelWidth = ([[[self navigationController] view] bounds].size.width - 30);
CGSize constraintSize = {labelWidth, CGFLOAT_MAX};
//calculate needed height for header label
CGSize textSize = [[self headerText] sizeWithFont:[UIFont systemFontOfSize:17.0f]
constrainedToSize:constraintSize
lineBreakMode:NSLineBreakByWordWrapping];
//build and set frame for header label:
//make it the same as the old
CGRect headerTempSize = [[self headerLabel] frame];
//except for the height …Run Code Online (Sandbox Code Playgroud) UITextView内容插入底部值在iOS 7中不起作用.
通过不工作我的意思是,如果我继续在UITextView中输入并且光标到达结尾然后它隐藏,我无法看到我正在键入的文本.
我试过了
[myTextView setTextContainerInset:UIEdgeInsetsMake(0, 0, 20, 0)];
[myTextView setContentInset:UIEdgeInsetsMake(0, 0, 20, 0)];
Run Code Online (Sandbox Code Playgroud)
但它没有产生任何影响.
我正在使用UIScrollView作为我的分页滚动视图pagesScrollView.在其中,我放置了专门用于缩放的单独UIScrollViews.在每个内部,我有一个视图,它是应该可缩放的页面项目.所有这些都在带有半透明导航栏的UINavigationController中.
我pagesScrollView有contentInset.top = 64和bounds.origin.y = -64(这对我来说似乎很奇怪,但这就是系统为我自动设置的),这很好用.我的屏幕看起来很棒!
然而,当我滚动pagesScrollView甚至一点点,只要scrollViewWillEndDragging被调用时,pagesScrollView开始动画的变化来自bounds.origin.y = -64于bounds.origin.y = 0这导致我的页面项目由导航栏被遮蔽.
左边是它加载时的样子,右边是我拖动几个像素然后松开后它会在导航栏下滑动(因为bounds.origin.y变为0) .

问题是我没有任何改变边界的代码,并且在各种滚动委托方法中没有任何代码可以做任何事情.我添加了一堆滚动委托方法,只是添加了NSLog(),所以我可以弄清楚改变发生的时间/地点,但是我的代码中没有发生任何事情.
所以,我不知道我可以告诉你什么代码来帮助你.
编辑:我从头开始构建一个新项目以删除所有其他变量..我将一个裸UIViewController放入UINavigationController.我将UIScrollView放入我的View中查看整个视图的大小.以下代码是整个项目.
事实证明,只有在UIScrollView上启用PAGING后才会出现问题(如下所述)!跆拳道?:)
这是一个下载基本项目的链接,只需几行代码即可演示此问题.只需单击滚动视图,您就会看到它随着边界的变化而向上移动.http://inadaydevelopment.com/stackoverflow/WeirdScrollViews.zip
如何在我的滚动视图中启用分页,而不会在滚动和移动导航栏下的所有内容时突然出现限制?
可以将导航栏设置为不透明并避免出现问题,但理想的是具有标准的iOS7行为,以便在内容视图缩放后,允许内容位于导航栏下并且应该通过半透明度正常显示.
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSArray *colors = @[
[UIColor blueColor],
[UIColor orangeColor],
[UIColor magentaColor],
];
NSArray *zoomerColors = @[
[UIColor greenColor],
[UIColor yellowColor],
[UIColor purpleColor],
];
self.scroller.pagingEnabled = YES;
[self.scroller setContentSize:CGSizeMake(self.scroller.frame.size.width*colors.count, self.scroller.frame.size.height)];
CGRect subviewFrame = CGRectMake(0, 0, 160, 240); …Run Code Online (Sandbox Code Playgroud) 我正试图在UILabel中设置一些插件.它工作得很好,但现在
UIEdgeInsetsInsetRect已被替换,CGRect.inset(by:)我无法找到如何解决这个问题.
当我试图使用CGRect.inset(by:)我的插图,然后我收到UIEdgeInsets不可转换的消息CGRect.
class TagLabel: UILabel {
override func draw(_ rect: CGRect) {
let inset = UIEdgeInsets(top: -2, left: 2, bottom: -2, right: 2)
super.drawText(in: CGRect.insetBy(inset))
// super.drawText(in: UIEdgeInsetsInsetRect(rect, inset)) // Old code
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何设置UILabel的插图?
我正在使用 XCode 系统图像(SF 符号)作为UITabBarItem图像。我想删除UITabBarItem我已经完成的标题。但也要UITabBarItem稍微向下移动图像。
过去,当我不使用系统映像时,使用UIEdgeInsets. 但是,这似乎对系统映像没有影响。
let imageConfiguration = UIImage.SymbolConfiguration(weight: .regular)
let imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -8, right: 0)
lazy var activityTabBarItem: UITabBarItem = {
let image = UIImage(systemName: "stopwatch")?.applyingSymbolConfiguration(imageConfiguration)
let tabBarItem = UITabBarItem(title: nil,
image: image,
selectedImage: image)
tabBarItem.imageInsets = imageInsets
return tabBarItem
}()
Run Code Online (Sandbox Code Playgroud)
有解决方法吗?
我想设置UITextView的contentInset属性.在这样做时,该UIEdgeInset的top变量工作得很好.所以[self.textView setContentInset: 'UIEdgeInsetsMake(50, 0, 0, 0)];工作.
但是,分配UIEdgeInsets的任何其他变量都不起作用.只有top调整.bottom不调整,无论做left或right.
所以[self.textView setContentInset: UIEdgeInsetsMake(0, 50, 100, 50)];对我的textView没有任何作用.
我错过了什么吗?有任何想法吗?
我有一个UITableViewCell扩展到所有边缘的内容。我在需要不同插图的多个表格中使用此单元格。(即,一个表格将从左侧插入 8 个点,另一个将它插入 20 个点。我想缩进父UITableView代码中的单元格(也许cellForRow?)而不缩进整个表格。
这显然是为整个表格设置的,但我想根据需要逐个单元地进行设置:
tableView.contentInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: -20)
Run Code Online (Sandbox Code Playgroud)
这没有效果:
tableViewCell.contentView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: -20)
Run Code Online (Sandbox Code Playgroud)
这也不起作用(即使它在单元格本身上):
override func layoutMarginsDidChange() {
super.layoutMarginsDidChange()
self.layoutMargins = UIEdgeInsets(top: 0, left: 20 bottom: 0, right: -20)
}
Run Code Online (Sandbox Code Playgroud) 我想以编程方式使用imageView下的标题创建一个UIButton.
按钮大小:170*120图片大小:50*50标题大小:取决于文字.
我知道我要使用,但我不知道如何:
[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f, 0.f, 0.f, 0.f)];
[_button setImageEdgeInsets:UIEdgeInsetsMake(0.f, 0.f, 0.f, 0.f)];
Run Code Online (Sandbox Code Playgroud)
我想我应该计算标题的大小然后使用EdgeInsets.
谢谢.
随着最近发布的iOS 9,可能需要对现有代码进行一些更新,以补偿对Apple API所做的任何更改.最近似乎他们已经做到了这样,当键盘出现时,集合视图现在会自动调整它的内容插入.这对于未手动处理或支持多个OS版本的用户非常有用.在我的应用程序中,它引起了一些头痛.我终于想出了一个使用KVO的解决方案来通知我系统何时更改了插件并且我做出了相应的反应,除了单个边缘情况外,一切正常.
如果我显示键盘,然后尝试通过交互式滑动返回导航堆栈导致beginAppearanceTransition:animated:被调用,但然后取消它然后点击键盘侧面以退出第一响应者,系统突然决定它做不想自动更新我的插件,我的KVO永远不会被内容插入触发,键盘消失但内容插入没有减少导致它看起来太错误...如果我点击文本字段导致键盘再次显示,突然它决定再次进行自动更新.
有没有人知道为什么它在取消更新我的插图的交互式转换后忽略了我对键盘的第一次解雇?
不得不重新审视这个问题,因为团队觉得它太脆弱和黑客,并且在玩这个以找出他们如何处理相同的情况后,他们似乎不必处理来自无处的错误呼叫.所以我子类UICollectionView并覆盖setContentInset函数只是为了在这里找到有问题的调用
IMG http://i63.tinypic.com/2hgqr7t.png
除了堆栈跟踪在这一点上没有特别的帮助,有没有人有任何想法?
uiedgeinsets ×10
ios ×8
ios7 ×4
swift ×3
uitextview ×3
uibutton ×2
image ×1
ios9 ×1
objective-c ×1
sf-symbols ×1
text ×1
uiscrollview ×1
uitabbaritem ×1
uitableview ×1
xcode ×1