是否可以更改UISegmentedControl的转角半径?我尝试过以下方法来改变UIView的角半径。
self.segmentedControl.layer.cornerRadius = 15.0;
self.segmentedControl.layer.masksToBounds = YES;
这不起作用,因为你可以看到它只切断了UISegmentedControl的角落。
谢谢!
答案 0 :(得分:92)
这应该有效:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct MyInfo{
std::string name;
MyInfo(const std::string& s) : name(s) {}
MyInfo() {}
};
int main (int argc, char** argv)
{
ifstream file("myfile.txt");
string line;
if (!file){
// handle error
return;
}
while (file){
getline(file, line);
MyInfo m(line); // this is your MyInfo object
// ...
}
}
您需要在设置cornerRadius后指定边框。
答案 1 :(得分:32)
在UIView中嵌入UISegmentedControl并为 UIView 设置角半径。
目标C
outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2;
outerView.layer.borderColor = [UIColor blueColor].CGColor;
outerView.layer.borderWidth = 1;
夫特
outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2
outerView.layer.borderColor = UIColor.blueColor().CGColor
outerView.layer.borderWidth = 1
答案 2 :(得分:9)
分段控制不会改变它的角落,所以它继续以自己的方式绘制角落,然后你将它们切断。您不负责分段控件如何绘制其边界形状。如果你真的不喜欢它的绘制方式,你必须从头开始设计自己的替代控制。你可以合理地接近你想要做的事情就是设置分段控件的背景图像。
答案 3 :(得分:6)
我决定再试一次,终于使它运转完美!! 有一行代码可以解决所有问题!签出代码
代码:
class CustomSegmentedControl: UISegmentedControl{
private let segmentInset: CGFloat = 5 //your inset amount
private let segmentImage: UIImage? = UIImage(color: UIColor.red) //your color
override func layoutSubviews(){
super.layoutSubviews()
//background
layer.cornerRadius = bounds.height/2
//foreground
let foregroundIndex = numberOfSegments
if subviews.indices.contains(foregroundIndex), let foregroundImageView = subviews[foregroundIndex] as? UIImageView
{
foregroundImageView.bounds = foregroundImageView.bounds.insetBy(dx: segmentInset, dy: segmentInset)
foregroundImageView.image = segmentImage //substitute with our own colored image
foregroundImageView.layer.removeAnimation(forKey: "SelectionBounds") //this removes the weird scaling animation!
foregroundImageView.layer.masksToBounds = true
foregroundImageView.layer.cornerRadius = foregroundImageView.bounds.height/2
}
}
}
extension UIImage{
//creates a UIImage given a UIColor
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
这个想法是苹果使用UIImageView带有自己的正方形图像并为选定的移动段着色。我们要做的是改写其图像,以便我们可以控制颜色,角半径等。此后,我们要删除Apple的3种默认动画之一(有问题的动画使该段在触摸时会放大- -我使用foregroundImageView.layer.animationKeys()
来找出哪些动画在影响移动的片段)
答案 4 :(得分:5)
更新了Swift 3&amp; Xcode 8.2兼容性
mySegmentedControl.layer.cornerRadius = 25.0
mySegmentedControl.layer.borderColor = UIColor.white.cgColor
mySegmentedControl.layer.borderWidth = 1.0
mySegmentedControl.layer.masksToBounds = true
答案 5 :(得分:5)
您可以通过增加 cornerRadius 层来更改 UISegmentedControl 角半径,或者通过设置 iOS 13及更高版本来更改 UISegmentedControl maskedCorner 属性。
此示例删除默认的 cornerRadius 并拉直 backgroundImage :
//normal function
@Transactional
void saveTransaction(String uniqueId) {
Transaction transaction = new Transaction();
transaction.setUniqueId(uniqueId);
transactionRepository.save(transaction);
}
**@Transactional** //Error Message - @Transactional not applicable to this field
Consumer<String> saveTransaction = (uniqueId) ->
{
Transaction transaction = new Transaction();
transaction.setUniqueId(uniqueId);
transactionRepository.save(transaction);
};
来源: https://developer.apple.com/documentation/quartzcore/calayer/2877488-maskedcorners
答案 6 :(得分:4)
你的结果是因为其他东西(自定义绘图?)控制边框而不是图层。幸运的是,图层设置似乎具有优先权。
如果您知道所需的边框颜色,可以添加(示例):
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0;
答案 7 :(得分:4)
之前的解决方案从未对我有用。我的解决方案是:
要将UISegmentedControl
嵌入到超级视图中,然后将-1分配给约束前导,尾随,底部,顶部,以便切断UISegmentedControl
边框。
最后,superview应该以这种方式配置:
segmentedControl.superview.clipsToBounds = true
segmentedControl.superview.layer.cornerRadius = 0 //whatever
segmentedControl.superview.layer.borderWidth = 1
segmentedControl.superview.layer.borderColor = segmentedControl.tintColor.CGColor
答案 8 :(得分:3)
这是[{3}}的 Swift 4.1和Xcode 9.3 的转换和工作代码。
segmentedOuterView.layer.cornerRadius = segmentedOuterView.bounds.height / 2
segmentedOuterView.layer.borderColor = UIColor.red.cgColor
segmentedOuterView.layer.borderWidth = 1
segmentedOuterView.layer.masksToBounds = true
答案 9 :(得分:3)
iOS13中有一些更改。因此,您必须在layoutSubviews
内设置borderRadius:
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = 2
}
答案 10 :(得分:1)
使用以下代码:
segmentContrl.layer.borderColor=*anycolor*.CGColor;
segmentContrl.layer.cornerRadius = 0.0;
segmentContrl.layer.borderWidth = 1.5f;
答案 11 :(得分:0)
可能没有layer
。你可以尝试
segmentedControl.borderColor = UIColor.line
segmentedControl.borderWidth = 1
segmentedControl.cornerRadius = 8