45
4

4 回答 4

96

TL;博士

斯威夫特 4.2使用theRect.inset(by: theInsets).

目标c使用UIEdgeInsetsInsetRect(theRect, theInsets)

例子

// CGRectMake takes: left, bottom, width, height.
const CGRect originalRect = CGRectMake(0, 0, 100, 50);

// UIEdgeInsetsMake takes: top, left, bottom, right.
const UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, -20, -20);

// Apply the insets…
const CGRect adjustedRect = UIEdgeInsetsInsetRect(originalRect, insets);

// What's the result?
NSLog(@"%@ inset by %@ is %@", 
      NSStringFromCGRect(originalRect),
      NSStringFromUIEdgeInsets(insets),
      NSStringFromCGRect(adjustedRect));

// Logs out…
// {{0, 0}, {100, 50}} inset by {10, 10, -20, -20} is {{10, 10}, {110, 60}}

解释

  • 正插图将矩形的边缘向内移动(朝向矩形中间)。
  • 负插图将边缘向外移动(远离矩形中间)。
  • 零插图将单独留下边缘。

告诉我更多

本说明CGRect涵盖了对 s 进行操作的更多有用函数。

于 2015-01-02T11:45:56.343 回答
8

2018 ... 斯威夫特4

说你想要界限,

但例如底部少两个像素:

let ei = UIEdgeInsetsMake(0, 0, 2, 0)   // top-left-bottom-right
let smaller = UIEdgeInsetsInsetRect(bounds, ei)

而已。

如果您更喜欢将其写成一行,那就是

从底部取下两个:

let newBounds = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 2, 0))

干杯

于 2017-04-04T03:20:12.380 回答
7

还是 2018 年 ... Swift 4.2

我想新方法看起来更好......

let newCGRect = oldCGRect.inset(by: UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8))
于 2018-08-01T22:02:07.160 回答
0
CGRect insetRect = CGRectInset(rOriginalRect, fInsetX, fInsetY);
于 2020-09-06T23:31:03.697 回答